PHP中strlen()和mb_strlen()的区别浅析


Posted in PHP onJune 19, 2014

在php中常见的计算字符串长度的函数有:strlen和mb_strlen.当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。

先来看一个例子:

<?php  

//测试时文件的编码方式要是UTF8  

$str='中文a字1符';  

echo strlen($str).'<br>';//14  

echo mb_strlen($str,'utf8').'<br>';//6  

echo mb_strlen($str,'gbk').'<br>';//8  

echo mb_strlen($str,'gb2312').'<br>';//10  

?>

结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14,在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6。

利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1)

echo (strlen($str) + mb_strlen($str,'UTF8')) / 2;

例如:“中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是10:

PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。

对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在UTF-8编码下,一个汉字占3个字节)。

采用mb_strlen函数可以较好地解决这个问题。

mb_strlen的用法和 strlen类似,只不过它有第二个可选参数用于指定字符编码。

例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到。

注意: mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll
即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函数的问题。

PHP 相关文章推荐
用PHP ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
php自动给文章加关键词链接的函数代码
Nov 29 PHP
php读取图片内容并输出到浏览器的实现代码
Aug 08 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
PHP中串行化用法示例
Nov 16 PHP
PHP精确计算功能示例
Nov 29 PHP
PHP分页显示的方法分析【附PHP通用分页类】
May 10 PHP
PHP大文件切割上传功能实例分析
Jul 01 PHP
php对包含html标签的字符串进行截取的函数分享
Jun 19 #PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 #PHP
PHP base64编码后解码乱码的解决办法
Jun 19 #PHP
PHP安全的URL字符串base64编码和解码
Jun 19 #PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 #PHP
ThinkPHP模板引擎之导入资源文件方法详解
Jun 18 #PHP
ThinkPHP CURD方法之field方法详解
Jun 18 #PHP
You might like
PHP实现的链式队列结构示例
2017/09/15 PHP
js substr、substring和slice使用说明小记
2011/09/15 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
js判断是否是手机页面
2017/03/17 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
利用layer实现表单完美验证的方法
2019/09/26 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
Python上传package到Pypi(代码简单)
2016/02/06 Python
Django admin美化插件suit使用示例
2017/12/12 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
python实现淘宝购物系统
2019/10/25 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
学生自我鉴定范文
2013/10/04 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
学校交通安全责任书
2014/08/25 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
责任书格式
2015/01/29 职场文书
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android