PHP8 字符串相关函数:全面解析与实战示例 字符串处理是 PHP 开发中的核心任务之一,无论是表单验证、数据格式化还是文本分析,都离不开字符串函数。PHP8 提供了丰富的字符串处理函数,涵盖字符串长度计算、大小写转换、查找替换、分割拼接等多种操作。本文将系统介绍常用的字符串函数及其在 PHP8 中的特性。
字符串基础操作函数 1. 字符串长度计算:strlen() strlen() 用于获取字符串的长度(字节数),对于 ASCII 字符,一个字符占 1 字节;对于 UTF-8 编码的中文等多字节字符,一个字符占 3 字节。
1 2 3 4 5 6 7 8 <?php $str1 = "Hello World" ;echo strlen ($str1 ); $str2 = "你好,PHP" ;echo strlen ($str2 ); ?>
注意:如需获取 UTF-8 字符串的字符数(而非字节数),应使用 mb_strlen()(多字节字符串函数)。
2. 字符串截取:substr() 与 mb_substr()
substr():按字节截取字符串,适合单字节字符(如英文);
mb_substr():按字符截取多字节字符串(如中文),需启用 mbstring 扩展。
1 2 3 4 5 6 7 8 9 10 11 12 <?php $str = "Hello 世界" ;echo substr ($str , 0 , 5 ); echo substr ($str , 6 , 3 ); echo mb_substr ($str , 0 , 6 ); echo mb_substr ($str , 6 , 2 ); ?>
3. 大小写转换:strtolower()、strtoupper() 等
strtolower():将字符串转为全小写;
strtoupper():将字符串转为全大写;
ucfirst():将字符串首字母转为大写;
ucwords():将字符串中每个单词的首字母转为大写。
1 2 3 4 5 6 7 8 9 <?php $str = "hello world" ;echo strtoupper ($str ); echo strtolower ($str ); echo ucfirst ($str ); echo ucwords ($str ); ?>
字符串查找与替换 1. 字符串查找:strpos() 与 strrpos()
strpos($str, $needle):查找子串 $needle 在 $str 中首次出现的位置(区分大小写);
strrpos($str, $needle):查找子串 $needle 在 $str 中最后一次出现的位置(区分大小写);
若未找到,返回 false(注意:位置可能为 0,需用 === 判断)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <?php $str = "Hello PHP, I love PHP" ;$needle = "PHP" ;$pos1 = strpos ($str , $needle );echo "首次出现位置:{$pos1} " ; $pos2 = strrpos ($str , $needle );echo "最后出现位置:{$pos2} " ; $notFound = strpos ($str , "Java" );var_dump ($notFound ); if (strpos ($str , $needle ) !== false ) { echo "找到子串" ; } ?>
2. 字符串替换:str_replace() 与 preg_replace()
str_replace($search, $replace, $str):简单字符串替换(非正则);
preg_replace($pattern, $replace, $str):正则表达式替换(支持复杂模式)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?php $str = "I like apple, apple is good" ;$newStr1 = str_replace ("apple" , "orange" , $str );echo $newStr1 ; $search = ["red" , "blue" ];$replace = ["green" , "yellow" ];$newStr2 = str_replace ($search , $replace , "red car and blue bike" );echo $newStr2 ; $strWithNum = "abc123def456" ;$newStr3 = preg_replace ("/\d+/" , "" , $strWithNum );echo $newStr3 ; ?>
字符串分割与拼接 1. 字符串分割:explode() explode($delimiter, $str, $limit) 按分隔符将字符串分割为数组,$limit 可选,限制返回数组的元素个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <?php $str = "apple,banana,orange,grape" ;$fruits = explode ("," , $str );print_r ($fruits ); $fruitsLimit = explode ("," , $str , 2 );print_r ($fruitsLimit ); $sentence = "Hello world this is PHP" ;$words = explode (" " , $sentence );print_r ($words ); ?>
2. 数组拼接为字符串:implode() implode($glue, $array) 用分隔符 $glue 将数组元素拼接为字符串($glue 可选,默认空字符串)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <?php $fruits = ["apple" , "banana" , "orange" ];$fruitsStr1 = implode ("," , $fruits );echo $fruitsStr1 ; $fruitsStr2 = implode ("\n" , $fruits );echo $fruitsStr2 ; $fruitsStr3 = implode ("" , $fruits );echo $fruitsStr3 ; ?>
字符串修整与过滤 1. 去除首尾空白:trim()、ltrim()、rtrim()
trim($str):去除字符串首尾的空白字符(空格、换行符 \n、制表符 \t 等);
ltrim($str):仅去除左侧空白;
rtrim($str):仅去除右侧空白。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?php $str = " \tHello World\n " ;echo "原始长度:" . strlen ($str ) . "<br>" ; $trimmed = trim ($str );echo "修整后:{$trimmed} <br>" ; echo "修整后长度:" . strlen ($trimmed ); $str2 = "###Hello###" ;echo trim ($str2 , "#" ); ?>
2. HTML 特殊字符处理:htmlspecialchars() 与 htmlentities()
htmlspecialchars($str):将 HTML 特殊字符(如 <、>、&)转换为实体(如 <、>、&),防止 XSS 攻击;
htmlentities():转换所有可转换的字符实体(包括非 ASCII 字符)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?php $html = '<script>alert("XSS攻击")</script>' ;$safeHtml = htmlspecialchars ($html );echo $safeHtml ; $originalHtml = htmlspecialchars_decode ($safeHtml );echo $originalHtml ; ?>
PHP8 新增的字符串函数与特性 1. str_contains()(PHP8+) 判断字符串是否包含指定子串,返回 true 或 false(替代 strpos() !== false 的写法)。
1 2 3 4 5 6 <?php $str = "PHP8 is awesome" ;var_dump (str_contains ($str , "PHP8" )); var_dump (str_contains ($str , "Java" )); ?>
2. str_starts_with() 与 str_ends_with()(PHP8+)
str_starts_with($str, $prefix):判断字符串是否以指定前缀开头;
str_ends_with($str, $suffix):判断字符串是否以指定后缀结尾。
1 2 3 4 5 6 7 8 9 10 11 12 13 <?php $filename = "document.pdf" ;$url = "https://example.com" ;var_dump (str_starts_with ($url , "https" )); var_dump (str_starts_with ($url , "ftp" )); var_dump (str_ends_with ($filename , ".pdf" )); var_dump (str_ends_with ($filename , ".txt" )); ?>
多字节字符串函数(mbstring 扩展) 对于 UTF-8 等多字节编码的字符串(如中文、日文),需使用 mbstring 扩展提供的函数,避免因字节处理导致乱码。常用多字节函数:
函数
用途
对应单字节函数
mb_strlen($str, 'UTF-8')
计算字符数(而非字节数)
strlen()
mb_substr($str, $start, $length, 'UTF-8')
按字符截取多字节字符串
substr()
mb_strpos($str, $needle, 0, 'UTF-8')
多字节字符串查找
strpos()
mb_strtolower($str, 'UTF-8')
多字节字符串转小写
strtolower()
1 2 3 4 5 6 7 8 9 10 11 <?php $str = "你好,世界!" ;echo "字节数:" . strlen ($str ) . "<br>" ; echo "字符数:" . mb_strlen ($str , 'UTF-8' ) . "<br>" ; echo mb_substr ($str , 0 , 2 , 'UTF-8' ); ?>
字符串函数最佳实践
处理多字节字符必用 mb_\* 函数 :中文、日文等多字节字符串需使用 mb_strlen()、mb_substr() 等,避免乱码;
用户输入先过滤 :用 trim() 去除首尾空白,htmlspecialchars() 处理 HTML 特殊字符,防止 XSS 攻击;
优先使用 PHP8 新增函数 :str_contains()、str_starts_with() 等函数更简洁,可读性更高;
正则替换需谨慎 :复杂正则表达式可能影响性能,简单替换优先用 str_replace();
判断是否包含子串的正确方式:
PHP8+:str_contains($str, $needle)
低版本:strpos($str, $needle) !== false(必须用 !==,避免 0 被误判为 false)。
总结 PHP8 提供了完善的字符串处理函数库,从基础的长度计算、截取,到复杂的查找替换、正则处理,覆盖了开发中的各种场景。掌握这些函数的用法,尤其是 PHP8 新增的 str_contains() 等便捷函数,以及多字节字符串的处理技巧,能显著提升字符串操作的效率和安全性。