浅析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实现定时生成HTML网站首页实例代码
Nov 20 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
php中禁止单个IP与ip段访问的代码小结
Jul 04 PHP
php更新mysql后获取影响的行数发生异常解决方法
Mar 28 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
php实现网站文件批量压缩下载功能
Oct 28 PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
Mar 04 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实现微信发红包功能
2018/07/13 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
js 调整select 位置的函数
2008/02/21 Javascript
javascript jQuery插件练习
2008/12/24 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
js实现抽奖效果
2017/03/27 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
Python中的pass语句使用方法讲解
2015/05/14 Python
python采集百度百科的方法
2015/06/05 Python
Python求出0~100以内的所有素数
2018/01/23 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
Python闭包思想与用法浅析
2018/12/27 Python
Python使用folium excel绘制point
2019/01/03 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
儿科护士实习自我鉴定
2013/10/17 职场文书
创业大赛策划书
2014/03/01 职场文书
作风建设演讲稿
2014/05/23 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
思想政治表现评语
2015/01/04 职场文书
学前教育见习总结
2015/06/23 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
MySQL分库分表详情
2021/09/25 MySQL
python使用torch随机初始化参数
2022/03/22 Python