答案:PHP中截取字符串常用substr和mb_substr,前者适用于单字节字符如英文,后者支持多字节字符如中文。substr按字节截取,处理中文易出现乱码;mb_substr按字符截取,需指定编码,推荐用于含中文场景。选择依据是字符类型:纯英文用substr性能好,含Unicode字符务必用mb_substr并开启mbstring扩展。

在PHP开发中,字符串截取是常见的操作,尤其是在处理标题、摘要或用户输入时。PHP提供了多个函数来实现字符串截取,其中最常用的是 substr 和 mb_substr。它们功能相似,但在处理多字节字符(如中文)时表现不同。
substr 函数:适用于单字节字符
substr 是PHP内置的字符串截取函数,适合处理英文、数字等单字节字符。其语法如下:
string substr ( string $string , int $start [, int $length ] )- $string:要截取的原始字符串
- $start:起始位置(从0开始)。若为负数,则从字符串末尾向前计数
- $length:可选,截取长度。若为负数,则截取到距离末尾该长度的位置
示例:
$str = "Hello World";echo substr($str, 0, 5); // 输出:Hello
echo substr($str, -5); // 输出:World
注意:substr 在处理中文等多字节字符时会出现乱码或截断不完整的问题,因为它按字节而非字符计算。
立即学习“PHP免费学习笔记(深入)”;
mb_substr 函数:支持多字节字符(推荐用于中文)
mb_substr 是PHP多字节字符串扩展函数,专门用于正确处理UTF-8、GBK等编码下的中文、日文、韩文等字符。其语法:
string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )- $str:原字符串
- $start:起始字符位置(按字符数,不是字节)
- $length:截取字符数量,可省略表示到结尾
- $encoding:字符编码,如 'UTF-8'、'GBK'。建议显式指定
示例:
$str = "你好世界 Hello";echo mb_substr($str, 0, 4, 'UTF-8'); // 输出:你好世界
echo mb_substr($str, 3, 5, 'UTF-8'); // 从第4个字符开始截5个:界 Hel
与 substr 相比,mb_substr 按实际字符截取,不会出现乱码,是处理中文内容的首选。
如何选择使用哪个函数?
关键看你的字符串是否包含非ASCII字符:
- 如果只处理英文、数字、符号,用 substr 完全没问题,性能也更好
- 如果涉及中文、表情符号或其他Unicode字符,必须使用 mb_substr
- 确保服务器开启了 mbstring 扩展,否则 mb_substr 无法使用
小技巧:可通过 mb_strlen 获取多字节字符串的真实字符长度,避免混淆。
基本上就这些。日常开发中,只要涉及用户输入或含中文内容,优先考虑 mb_substr 并指定编码,能有效避免乱码问题。substr 虽然快,但不适合复杂语言环境。根据场景合理选择,才能写出更健壮的代码。











