浅析PHP中strlen和mb_strlen的区别


Posted in PHP onAugust 31, 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.

echo mb_internal_encoding();

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 相关文章推荐
3
Oct 09 PHP
网站加速 PHP 缓冲的免费实现方法
Oct 09 PHP
打造计数器DIY三步曲(上)
Oct 09 PHP
php类
Nov 27 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
Jun 27 PHP
用php守护另一个php进程的例子
Feb 13 PHP
PHP文件与目录操作示例
Dec 24 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
PHP attributes()函数讲解
Feb 03 PHP
PHP优化之批量操作MySQL实例分析
Apr 23 PHP
PHP7 参数处理机制修改
Mar 09 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 #PHP
PHP实现数组递归转义的方法
Aug 28 #PHP
PHP之autoload运行机制实例分析
Aug 28 #PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 #PHP
PHP反射机制用法实例
Aug 28 #PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 #PHP
PHP对象递归引用造成内存泄漏分析
Aug 28 #PHP
You might like
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
jquery each()源代码
2011/02/14 Javascript
JS高级笔记
2011/07/13 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
Node.js学习之地址解析模块URL的使用详解
2017/09/28 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
精彩的大学生自我评价
2013/11/17 职场文书
市场营销专业个人求职信范文
2013/12/14 职场文书
监理资料员岗位职责
2014/01/03 职场文书
护士思想汇报
2014/01/12 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
督导岗位职责
2015/02/04 职场文书
员工开除通知书
2015/04/25 职场文书
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python