推荐 mb_strlen() 是因为其按字符而非字节计数,能准确处理 utf-8 编码下的中文、emoji 等多字节字符;strlen() 仅适用于纯 ascii 字符串,且需确保 mbstring 扩展已启用。

PHP 7.1 中判断字符串长度,优先用 mb_strlen() 函数。
为什么推荐 mb_strlen()?
因为 PHP 7.1 默认使用 UTF-8 编码处理网页和 API 数据,而中文、日文、emoji 等字符在 UTF-8 下占多个字节。如果用 strlen(),它只按字节计数,会导致汉字被算成 3 个“字符”(UTF-8 下一个汉字是 3 字节),实际语义上只是 1 个字符。
- strlen("你好") 返回 6(错误地当成 6 个字符)
- mb_strlen("你好", "UTF-8") 返回 2(正确反映是 2 个汉字)
mb_strlen() 的基本用法
必须指定编码,否则可能因默认编码不一致导致结果不准:
-
mb_strlen($str, "UTF-8")—— 最常用,适合现代 Web 应用 -
mb_strlen($str, "GB2312")—— 仅用于旧系统或特定中文环境 - 若省略第二个参数,函数会使用
mb_internal_encoding()的当前值,但该值未必是你期望的
strlen() 还能用吗?
可以,但仅限明确知道字符串全是 ASCII 字符时,比如纯数字 ID、英文 token、base64 字符串等:
-
strlen("abc123")→ 6(安全、高效) -
strlen("用户ID:123")→ 结果不可靠(中文冒号和汉字都会被多算)
注意 mbstring 扩展是否启用
mb_strlen() 属于 mbstring 扩展,在 PHP 7.1 中默认不总是开启。部署前需确认:
- 运行
php -m | grep mbstring查看是否已加载 - 若未启用,需在 php.ini 中取消
;extension=mbstring前的分号,并重启 Web 服务 - 也可用
function_exists('mb_strlen')在代码中做兼容性判断
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











