浅析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 相关文章推荐
php 表单验证实现代码
Mar 10 PHP
用php将任何格式视频转为flv的代码
Sep 03 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
Jul 28 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
php对象和数组相互转换的方法
May 12 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
php微信支付之公众号支付功能
May 30 PHP
PHP输出Excel PHPExcel的方法
Jul 26 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
Apr 15 PHP
php设计模式之适配器模式原理、用法及注意事项详解
Sep 24 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随机数生成代码与使用实例分析
2011/04/08 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
php 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
php中final关键字用法分析
2016/12/07 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
继续学习javascript闭包
2015/12/03 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
[03:00]2014DOTA2国际邀请赛 Titan淘汰潸然泪下Ohaiyo专访
2014/07/15 DOTA
Python完全新手教程
2007/02/08 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
python super函数使用方法详解
2020/02/14 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
python 调用Google翻译接口的方法
2020/12/09 Python
python中remove函数的踩坑记录
2021/01/04 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
部门2014年度工作总结
2014/11/12 职场文书
2015年校长新年寄语
2014/12/08 职场文书
运动员代表致辞
2015/07/29 职场文书
公司周年庆典致辞
2015/07/30 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技