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 相关文章推荐
通过html表格发电子邮件
Oct 09 PHP
php防盗链的常用方法小结
Jul 02 PHP
php网上商城购物车设计代码分享
Feb 15 PHP
PHP不用递归遍历目录下所有文件的代码
Jul 04 PHP
php实现网站留言板功能
Nov 04 PHP
php bootstrap实现简单登录
Mar 08 PHP
PHP不使用递归的无限级分类简单实例
Nov 05 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
PHP memcache在微信公众平台的应用方法示例
Sep 13 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
Yii框架getter与setter方法功能与用法分析
Oct 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
php获取'/'传参的值简单方法
2017/07/13 PHP
JavaScript去掉空格的方法集合
2010/12/28 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
python将人民币转换大写的脚本代码
2013/02/10 Python
使用Python求解最大公约数的实现方法
2015/08/20 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
铭立家具面试题
2012/12/06 面试题
幼儿园实习生辞职信
2014/01/20 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
开展读书活动总结
2014/06/30 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
财务工作失误检讨书
2015/02/19 职场文书
元旦主持词开场白
2015/05/29 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书