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异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
Apr 28 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
php最简单的删除目录与文件实现方法
Nov 28 PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 PHP
php使用timthumb生成缩略图的方法
Jan 22 PHP
Yii2中使用asset压缩js,css文件的方法
Nov 24 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
PHP使用HTML5 FormData对象提交表单操作示例
Jul 02 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
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
深入学习JavaScript中的原型prototype
2015/08/13 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
python遍历类中所有成员的方法
2015/03/18 Python
Python实现二叉搜索树
2016/02/03 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
Django之模板层的实现代码
2019/09/09 Python
Python缓存技术实现过程详解
2019/09/25 Python
python计算n的阶乘的方法代码
2019/10/25 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
意外伤害赔偿协议书
2014/09/16 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
见习报告的格式
2014/10/31 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
保险内勤岗位职责
2015/04/13 职场文书
董存瑞观后感
2015/06/11 职场文书
图书馆义工感想
2015/08/07 职场文书
中学语文教学反思
2016/02/16 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
2022年四月新番
2022/03/15 日漫