首页 > 编程笔记 > PHP笔记 阅读:3

PHP substr()函数:截取字符串

在一个字符串中截取一个子串就是字符串截取。在 PHP 中,完成这个操作可以借助 substr() 函数。

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。

相关文章