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 相关文章推荐
wiki-shan写的php在线加密的解密程序
Sep 07 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
php自动给文章加关键词链接的函数代码
Nov 29 PHP
基于PHP静态类的原罪详解
May 06 PHP
关于crontab的使用详解
Jun 24 PHP
codeigniter教程之多文件上传使用示例
Feb 11 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 PHP
PHP常用的排序和查找算法
Aug 06 PHP
smarty中常用方法实例总结
Aug 07 PHP
PHP标准库(PHP SPL)详解
Mar 16 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 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生成静态HTML文档的原理
2012/10/29 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
PHP 读取和编写 XML
2014/11/19 PHP
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
python的keyword模块用法实例分析
2015/06/30 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
python 随机森林算法及其优化详解
2019/07/11 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
置业顾问岗位职责
2014/03/02 职场文书
项目建议书格式
2014/03/12 职场文书
《老山界》教学反思
2014/04/08 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
婚庆主持词大全
2015/06/30 职场文书
员工试用期工作总结
2019/06/20 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL
在Docker容器中部署SQL Server
2022/04/11 Servers