信息发布→ 登录 注册 退出

PHP截取字符串函数_substr mb_substr字符串截取方法详解

发布时间:2025-11-05

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

在PHP开发中,字符串截取是常见的操作,尤其是在处理标题、摘要或用户输入时。PHP提供了多个函数来实现字符串截取,其中最常用的是 substrmb_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 在处理中文等多字节字符时会出现乱码或截断不完整的问题,因为它按字节而非字符计算。

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 虽然快,但不适合复杂语言环境。根据场景合理选择,才能写出更健壮的代码。

标签:# ASCII  # 日文  # 多个  # 是在  # 你好  # 若为  # 的是  # 出现乱码  # 适用于  # 英文  # 多字  # php  # Length  # int  # 字符串  # NULL  # String  # echo  # php开发  # 字节  # 编码  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!