PHP substr()函数:截取字符串
在一个字符串中截取一个子串就是字符串截取。在 PHP 中,完成这个操作可以借助 substr() 函数。
substr() 函数的格式如下:
如果都是正数,起始位置的整数必须小于截取长度的整数,否则函数返回值为假。
如果截取长度为负数,则意味着是从起始位置开始往后、除去从目标字符串结尾算起的长度数的字符以外的所有字符。
以下实例介绍字符串截取的方法和技巧:
$aa 为英文字符串变量。substr($aa,0,11) 和 substr($aa,1,15) 展示了起始位和截取长度。substr($aa,0,-2)则是从字符串开头算起,除了最后两个字符外,其他字符都截取的子字符串。
$bb 为中文字符串变量。因为 UTF-8 的中文字符长度是 3,所以截取 12 和 9 的长度都比较正常。当截取长度为 11 时,不是 3 的倍数,此时将会出现问题。所以,要小心使用。
从上述案例可以看出,当字符串中有中文字符时,截取字符串时尽量不使用 substr() 函数。那么应该如何操作?这里建议使用 mbstring 扩展库的 mb_substr() 函数,可以解决上述问题。
mb_substr() 函数的使用方法和 substr() 函数类似,只是在参数中多加入一个设置字符串编码的参数。
例如:
指定了 UTF-8 编码后,一个汉字的长度就是 1。
substr() 函数的格式如下:
substr(目标字符串,起始位置,截取长度)有3个参数,分别规定了目标字符串、起始位置和截取长度。其中,目标字符串是某个字符串变量的变量名,起始位置和截取长度都是整数。
如果都是正数,起始位置的整数必须小于截取长度的整数,否则函数返回值为假。
如果截取长度为负数,则意味着是从起始位置开始往后、除去从目标字符串结尾算起的长度数的字符以外的所有字符。
以下实例介绍字符串截取的方法和技巧:
<?php $aa = "create a substring of this string."; //定义字符串变量$aa $bb = "创建一个这个字符串的子串。"; echo substr($aa,0,11)."<br/>"; //截取字符串前11个字符 echo substr($aa,1,15)."<br/>"; //截取从第二个字符开始的前15个字符 echo substr($aa,0,-2)."<br/>"; //截取除最右侧两个字符外的字符 echo substr($bb,0,12)."<br/>"; //截取字符串前12个字符 echo substr($bb,0,9)."<br/>"; //截取字符串前9个字符 echo substr($bb,0,11); //截取字符串前11个字符 ?>运行结果如下图所示:

$aa 为英文字符串变量。substr($aa,0,11) 和 substr($aa,1,15) 展示了起始位和截取长度。substr($aa,0,-2)则是从字符串开头算起,除了最后两个字符外,其他字符都截取的子字符串。
$bb 为中文字符串变量。因为 UTF-8 的中文字符长度是 3,所以截取 12 和 9 的长度都比较正常。当截取长度为 11 时,不是 3 的倍数,此时将会出现问题。所以,要小心使用。
从上述案例可以看出,当字符串中有中文字符时,截取字符串时尽量不使用 substr() 函数。那么应该如何操作?这里建议使用 mbstring 扩展库的 mb_substr() 函数,可以解决上述问题。
mb_substr() 函数的使用方法和 substr() 函数类似,只是在参数中多加入一个设置字符串编码的参数。
例如:
<?php $aa = "时间会刺破青春表面的彩饰"; echo mb_substr($aa,0,11,"utf-8")."<br/>"; //截取字符串前11个汉字 echo mb_substr($aa,1,8,"utf-8")."<br/>"; //截取从第二个字符开始的前8个汉字 echo mb_substr($aa,0,-2,"utf-8"); //截取除最右侧两个字符外的汉字 ?>运行结果如下图所示:

指定了 UTF-8 编码后,一个汉字的长度就是 1。