介绍
substr 函数用来对一个字符串的内容进行截取,返回字符串的一部分内容。
函数原型如下:
substr(string $string, int $start[, int $length]) : string
第一个参数为字符串 $string,必传,表示原始的字符串。
第二个参数为整型 $start,必传,表示截取起始的位置(截取包含此字符),参数为非负数时表示位置从原字符串开头向右数(第一个字符位置为 0),参数为负数时表示位置从原字符串末尾向左数(原字符末尾的位置为 -1)。
第三个参数为整型 $length,可选,表示截取字符的长度(即从截取起始的位置)。字符的截取方向从左向右。当未传此参数时,表示截取到末尾。参数为负数时表示省略末尾的此长度的字符(-1 表示省略 1 个字符)。
返回值,成功时为截取后的字符串;失败时为 false。
用法
// 指定开始位置 substr('zhangxingchao', 2); // 返回 angxingchao
// 指定开始位置(负数)
substr('zhangxingchao', -4);
// 返回 chao
// 指定开始位置、截取长度 substr('zhangxingchao', 5, 4); // 返回 xingchao
// 指定开始位置、截取长度(负数) substr('zhangxingchao', 5, -2); // 返回 xingch
经验
结果判断问题
当我们需要判断是否执行成功时,需要使用全等而不是等于。比如:
// 截取失败时 if (substr("1230", -1, 0) == false)) { echo "fail"; } // 此例子中实际截取成功
中文乱码问题
在 UTF-8 编码中,一个中文至少占三个字节。substr 函数的长度单位为字节长度,截取时若按照中文字符个数传递截取长度,可能会截取半个中文字符,导致出现乱码问题。
比如:
substr("大神", 0, 1); // 乱码 substr("大神", 0, 2); // 乱码 substr("大神", 0, 3); // 字符:大
解决办法是使用 mb_substr 函数,它支持多字节字符的截取。
echo mb_substr("大神", 0, 1); // 字符:大
参考资料
- 《PHP 手册 substr》https://www.php.net/manual/zh/function.substr.php