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 相关文章推荐
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
Oct 29 PHP
在PHP中实现Javascript的escape()函数代码
Aug 08 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
深入理解PHP之require/include顺序 推荐
Jan 02 PHP
PHP如何利用P3P实现跨域
Aug 24 PHP
PHP base64编码后解码乱码的解决办法
Jun 19 PHP
项目中应用Redis+Php的场景
May 22 PHP
PHP 7.4中使用预加载的方法详解
Jul 08 PHP
laravel实现按月或天或小时统计mysql数据的方法
Oct 09 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
PHP常用字符串函数用法实例总结
Jun 04 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调用Twitter的RSS的实现代码
2010/03/10 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
PHP实现递归的三种方法
2020/07/04 PHP
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
详解jquery uploadify 上传文件
2013/11/09 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
Pytorch to(device)用法
2020/01/08 Python
Python如何在DataFrame增加数值
2020/02/14 Python
python中pop()函数的语法与实例
2020/12/01 Python
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
非常详细的C#面试题集
2016/07/13 面试题
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
化学教学随笔感言
2014/02/19 职场文书
暑期教师培训方案
2014/06/07 职场文书
大学生就业自荐书
2014/06/16 职场文书
委托书范本
2014/09/13 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
先进学校事迹材料
2014/12/30 职场文书
国庆节主题班会
2015/08/15 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers