php实现中文截取
PHP 实现中文截取的方法
在 PHP 中截取中文字符串时,需要注意中文字符是多字节字符(UTF-8 编码下通常占 3 个字节),直接使用 substr 会导致乱码或截取不完整。以下是几种常用方法:
使用 mb_substr 函数
mb_substr 是多字节安全的字符串截取函数,需确保 PHP 已启用 mbstring 扩展。

$str = "这是一段中文字符串";
$length = 5; // 截取长度
$substring = mb_substr($str, 0, $length, 'UTF-8');
echo $substring; // 输出:这是一段中
参数说明:

- 第一个参数:原始字符串。
- 第二个参数:起始位置(从 0 开始)。
- 第三个参数:截取长度。
- 第四个参数:字符编码(必须指定为
UTF-8)。
自定义函数处理(无 mbstring 扩展时)
如果服务器不支持 mbstring,可以通过正则匹配实现:
function substr_cn($str, $start, $length) {
return preg_replace('/^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$start.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$length.'}).*/s',
'$1', $str);
}
$str = "这是一段中文字符串";
echo substr_cn($str, 0, 5); // 输出:这是一段中
处理截取后添加省略号
截取后若需显示省略号,可检查原字符串长度是否超过截取长度:
$str = "这是一段很长的中文字符串";
$max_length = 5;
if (mb_strlen($str, 'UTF-8') > $max_length) {
$str = mb_substr($str, 0, $max_length, 'UTF-8') . '...';
}
echo $str; // 输出:这是一段很...
注意事项
- 编码一致性:确保字符串操作全程使用 UTF-8 编码。
- 函数依赖:优先使用
mb_substr,需在php.ini中启用mbstring扩展。 - 性能考虑:正则方法效率较低,仅作为备用方案。






