PHP strlen 和 mb_strlen 统计字符长度有什么差异
发布:smiling 来源: PHP粉丝网 添加日期:2026-10-23 14:43:51 浏览: 评论:0
核心差异在于strlen统计字节数、mb_strlen统计字符数;前者在UTF-8下将“你好”计为6字节,后者按编码识别字符边界,如mb_strlen("你好","UTF-8")返回2。
核心差异在于:strlen 统计的是字节数,mb_strlen 统计的是字符数——前提是正确指定编码。
strlen 只认字节,不识字符
它把字符串当成一串原始字节来数,不管内容是英文、数字还是中文。在 UTF-8 编码下,一个中文字符占 3 个字节,所以:
"你好" → strlen 返回 6(2 个字符 × 3 字节)
"abc" → strlen 返回 3(每个字母占 1 字节)
"中文a1" → strlen 返回 3+3+1+1 = 8
它无法区分“一个汉字”和“三个连续字节”,因此在含中文、日文、emoji 等多字节字符的场景中,结果不是你想要的“长度”。
mb_strlen 按字符单位计算,但依赖编码参数
它会根据指定的字符编码(如 'UTF-8'、'GBK')识别多字节序列边界,真正按“人眼看到的字符个数”来算:
mb_strlen("你好", "UTF-8") → 返回 2
mb_strlen("你好", "GBK") → 返回 2(GBK 中一个汉字占 2 字节,仍为 1 字符)
mb_strlen("a€??", "UTF-8") → 返回 4(字母、欧元符号、emoji 家庭都是独立字符)
⚠️ 注意:如果不传第二个参数,mb_strlen 会使用 PHP 内部编码(可用 mb_internal_encoding() 查看),而该编码可能不是 UTF-8,导致结果出错。
常见误用与关键前提
mbstring 扩展必须启用:php.ini 中需开启 extension=mbstring,否则调用 mb_strlen 会报“未定义函数”
文件保存编码要匹配:PHP 源文件若存为 UTF-8,但用 mb_strlen('中文', 'GBK') 计算,结果可能异常(如返回 3 或乱码)
不能混用逻辑:用 strlen 截取、用 mb_strlen 判断长度,极易导致截断错位或乱码——应全程统一使用 mb_ 系列处理多字节文本
怎么选?看用途
判断表单输入是否超 20 个“字”?→ 用 mb_strlen($str, 'UTF-8')
计算 JSON 字符串传输体积?→ 用 strlen($json)(JSON 是字节流)
需要中英文混合占位估算(中文占 2 位、英文占 1 位)?→ 可组合:(strlen($str) + mb_strlen($str, 'UTF-8')) / 2
Tags: PHP strlen mb_strlen
- 上一篇:PHP 单例模式常见错误写法,多进程场景下单例失效问题
- 下一篇:最后一页
相关文章
- ·PHP中通过Web 执行C/C++应用程序(2013-11-13)
- ·用PHP实现Ftp用户的在线管理(2013-11-13)
- ·用PHP自动把纯文本转换成Web页面(2013-11-13)
- ·用实例分析PHP5异常处理(2013-11-13)
- ·php5的simplexml解析错误(2013-11-13)
- ·PHP后门的隐藏技巧测试报告(2013-11-13)
- ·PHP缓存技术详谈(2013-11-27)
- ·利用PHP自定义错误处理器处理出错信息(2013-11-27)
- ·PHP作wap开发时遇到的问题(2013-11-27)
- ·php编写大型网站问题集(2013-11-27)
- ·php测试性能代码(2013-11-28)
- ·php 安全register globals设置为TRUE的危害(2013-11-28)
- ·XSLTProcessor 中 registerPHPFunctions 后无法调用 php 函数(2013-11-30)
- ·PHP中常用三种缓存技术(2013-11-30)
- ·新浪微博PHP版SDK的导致20007错误(2013-12-03)
- ·linux中phpMyAdmin错误提示Wrong permissions on configuration file, should no(2013-12-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)
