本文提供两种方法实现中文字符串的截取
1.使用系统提供的 mb_substr() 或 iconv_substr() 函数(php.ini 配置文件中的 mbstring 扩展要开启才能使用):
函数说明:
string mb_substr ( string
$str
, int$start
[, int$length
= NULL [, string$encoding
= mb_internal_encoding() ]] )
参数:
str 从该 string 中提取子字符串。
start str 中要使用的第一个字符的位置。
length str 中要使用的最大字符数。
encoding 字符编码。如果省略,则使用内部字符编码
例子:
$str = '是sdw来的abcde'; echo mb_substr($str,0,5,'utf-8') . "<br/>"; // 输出:是sdw来
iconv_substr() 函数的用法同 mb_substr() 。
2.自己编写一个字符串截取函数解决:
/**
* 中文字符串截取
* @param string $str 待截取的字符串
* @param int|integer $start 开始位置
* @param int|null $length 截取长度,默认截取到字符串末尾
*/
function UTF8Substr($str, $start = 0, $length = NULL)
{
$count = 0;
$offset = $start;
$len = strlen($str);
for ($i=0; $i < $len; $i++) {
if (($count - $start) == $length) {
break;
}
if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", substr($str, $i, 1))) {
$i += 2;
}
++$count;
if ($count == $start) {
$offset = $i + 1;
}
}
return substr($str, $offset, $length?($i - $offset):strlen($str));
}
测试用例:
$str = "a是df浏览未dfsdfads";
var_dump(UTF8Substr($str, 3, 5)); // 输出:f浏览未d
var_dump(UTF8Substr($str, 3)); // 输出:f浏览未dfsdfads