PHP 7.2 中获取中文字符串长度应使用 mb_strlen($str, 'UTF-8'),因其准确返回字符数而非字节数;strlen() 返回字节数易致错误,iconv_strlen() 可作备选但容错性较差。

PHP 7.2 中获取中文字符串长度,关键在于区分“字节数”和“字符数”。直接用 strlen() 会出错——它只数字节,一个 UTF-8 中文字符占 3 字节,"你好" 就返回 6,但实际只有 2 个字符。
必须用 mb_strlen() 函数
这是 PHP 7.2 官方推荐且最稳妥的方式,前提是已启用 mbstring 扩展(PHP 7.2 默认开启,可检查 phpinfo() 中是否显示 mbstring support → enabled)。
- 语法:
mb_strlen($str, 'UTF-8') - 第二个参数编码必须显式指定,不能省略。即使设置了
mb_internal_encoding('UTF-8'),也建议写明,避免环境差异导致误判 - 示例:
$len = mb_strlen('欢迎来到PHP7.2', 'UTF-8'); // 返回 10
备选方案:iconv_strlen()
如果因某些限制无法使用 mbstring,iconv_strlen() 是可行替代,同样支持多字节编码:
- 语法:
iconv_strlen($str, 'UTF-8') - 需确保 iconv 扩展已启用(PHP 7.2 默认开启)
- 注意:该函数对非法 UTF-8 字节序列更敏感,可能抛 Warning;而 mb_strlen() 容错性稍强
千万别踩的坑
以下操作在 PHP 7.2 中依然常见但错误:
立即学习“PHP免费学习笔记(深入)”;
-
strlen("测试")→ 返回 6(不是 2),用于表单校验或数据库字段长度比对会直接失败 -
mb_strlen($str)不带编码参数 → 依赖内部编码设置,线上环境若未统一配置极易出错 - 混淆
substr()和mb_substr():截取中文时用 substr 可能切出乱码,长度计算错误往往伴随截取错误
验证是否生效的小技巧
写一段最小测试代码,快速确认环境是否就绪:
<?php
$s = 'abc你好';
echo "strlen: " . strlen($s) . "<br>";
echo "mb_strlen: " . mb_strlen($s, 'UTF-8') . "<br>";
echo "iconv_strlen: " . iconv_strlen($s, 'UTF-8');
?>
理想输出应为:strlen: 9(3 字母 ×1 + 2 汉字 ×3)、mb_strlen: 5、iconv_strlen: 5。三者不一致说明编码或扩展有问题。



















