应使用 mbstrlen() 获取中文字符串的字符数,因其按字符而非字节计算,需指定编码如 'utf-8',并确保源头编码统一;含非 ascii 字符时均应优先使用 mb* 系列函数。

PHP 中 strlen() 获取中文长度不准,是因为它按字节计算长度,而 UTF-8 编码下中文通常占 3 个字节,所以一个汉字会被算成 3。要准确获取中文字符串的字符数(即“人眼看到的长度”),应该用 mb_strlen()。
用 mb_strlen() 替代 strlen()
mb_strlen() 是 PHP 的多字节字符串函数,能正确识别 UTF-8、GBK 等编码下的中文字符,返回的是字符个数而非字节数。
- 确保 PHP 已启用
mbstring扩展(绝大多数现代环境默认开启) - 调用时显式指定编码,避免依赖默认设置出错:
echo mb_strlen("你好world", 'UTF-8'); // 输出:7("你好"2个 + "world"5个)
注意编码一致性
如果字符串实际是 GBK 编码(比如老系统或部分数据库),却用 'UTF-8' 当参数,结果仍会错。需确认真实编码:
- 用
mb_detect_encoding($str)粗略探测(不完全可靠,慎用于生产) - 更稳妥的方式是统一源头:数据库连接设为 UTF-8、HTML 声明 charset、PHP 文件保存为 UTF-8 无 BOM
其他常用多字节替代函数
类似地,处理中文时这些函数也应优先用 mb 版本:
-
mb_substr($str, 0, 5, 'UTF-8')—— 截取前 5 个字符(不是 5 字节) -
mb_strpos($str, '搜索词', 0, 'UTF-8')—— 定位中文子串位置 -
mb_strtolower($str, 'UTF-8')—— 对中文无效,但对带英文的混合字符串安全
简单判断是否该用 mb_ 函数
只要字符串可能含中文、日文、韩文、emoji 或其他非 ASCII 字符,且你关心的是“字符个数”,就该用 mb_* 系列函数。只处理纯英文+数字+ASCII 符号时,strlen() 才安全可靠。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











