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和AJAX创建RSS聚合器的代码
Mar 13 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
深入PHP autoload机制的详解
Jun 09 PHP
百度站点地图(百度sitemap)生成方法分享
Jan 09 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 PHP
php如何实现只替换一次或N次
Oct 29 PHP
PHP防止刷新重复提交页面的示例代码
Nov 11 PHP
linux下为php添加iconv模块的方法
Feb 28 PHP
php微信开发之自定义菜单实现
Nov 18 PHP
Laravel使用消息队列需要注意的一些问题
Dec 13 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
PHP读取目录树的实现方法分析
Mar 22 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
非常不错的MySQL优化的8条经验
2008/03/24 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
php7性能提升的原因详解
2019/10/13 PHP
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
2016/06/17 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
Python解惑之True和False详解
2017/04/24 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
2019/12/09 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
医药工作岗位求职信分享
2013/12/31 职场文书
护士节策划方案
2014/05/19 职场文书
文明城市创建标语
2014/06/16 职场文书
老兵退伍标语
2014/10/07 职场文书
幼儿园见习总结
2015/06/23 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python
Python中的turtle画箭头,矩形,五角星
2022/03/16 Python
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js