字符串长度函数strlen和mb_strlen的区别示例介绍


Posted in PHP onSeptember 09, 2014

在php中常见的计算字符串长度的函数有:strlen和mb_strlen.当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。

在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 中的一些经验积累
Oct 09 PHP
第一节--面向对象编程
Nov 16 PHP
一个比较简单的PHP 分页分组类
Dec 10 PHP
关于php fread()使用技巧
Jan 22 PHP
深入PHP数据加密详解
Jun 18 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
Aug 09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 27 PHP
thinkphp在模型中自动完成session赋值示例代码
Sep 09 #PHP
PHP使用Mysql事务实例解析
Sep 08 #PHP
PHP闭包实例解析
Sep 08 #PHP
PHP数组排序之sort、asort与ksort用法实例
Sep 08 #PHP
php实现的常见排序算法汇总
Sep 08 #PHP
php实现最简单的MVC框架实例教程
Sep 08 #PHP
PHP基本语法总结
Sep 06 #PHP
You might like
乱谈我对耳机、音箱的感受
2021/03/02 无线电
一个程序下载的管理程序(二)
2006/10/09 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
自己做的模拟模态对话框实现代码
2012/05/23 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
2013/11/25 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
javascript中this关键字详解
2016/12/12 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
使用Python对Excel进行读写操作
2017/03/30 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
python 生成器需注意的小问题
2020/09/29 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
Stella McCartney官网:成衣、包袋、香水、内衣、童装及Adidas系列
2018/12/20 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
妇产科护士自我鉴定
2013/10/15 职场文书
安全环保演讲稿
2014/08/28 职场文书
2014年教师节活动总结
2014/08/29 职场文书
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书