PHP 7.4 中 mb_substr() 支持负数 offset 和 length,可安全截取多字节字符;必须显式指定 encoding(如 'UTF-8'),否则易乱码;offset 为负从末尾计,length 为负则排除末尾字符。

PHP 7.4 中 mb_substr() 支持负数 $offset,用于从字符串末尾开始截取,行为与 substr() 类似,但能正确处理多字节字符(如中文、emoji 等)。
负数 offset 的含义
当 $offset 为负数时,表示从字符串末尾往前数的偏移位置:
-
mb_substr($str, -1)→ 取最后一个字符 -
mb_substr($str, -2)→ 从倒数第 2 个字符开始,取到末尾 -
mb_substr($str, -3, 2)→ 从倒数第 3 个字符开始,取 2 个字符
必须指定正确的字符编码
负数截取依赖准确的字符长度计算,务必传入第三个参数 $encoding(如 'UTF-8'),否则在某些环境下可能默认使用 ISO-8859-1,导致中文乱码或截断错误:
mb_substr("你好世界", -2); // 结果不可靠,可能返回乱码或空
mb_substr("你好世界", -2, 2, 'UTF-8'); // 返回 "世界"mb_substr("Hello?", -1, 1, 'UTF-8'); // 返回 "?"(而非半个 emoji)
length 参数为负数的用法(PHP 7.4+)
PHP 7.4 起,$length 也支持负数,表示“排除末尾若干字符”:
-
mb_substr("abcde", 0, -2, 'UTF-8')→ 返回"abc"(去掉末尾 2 个) -
mb_substr("测试文本", 2, -1, 'UTF-8')→ 从第 2 个字符起,去掉最后 1 个 →"试文"
常见陷阱提醒
⚠️ 注意以下情况:
- 若
$offset的绝对值超过字符串字符数,返回空字符串(不是警告) - 不推荐依赖
mb_internal_encoding()全局设置,显式传参更安全 - 对 ASCII 字符串虽可用
substr(),但混用中英文/emoji 时,mb_substr()是唯一可靠选择
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











