字符串长度函数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中大括号作用介绍
Mar 22 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
php中动态调用函数的方法
Mar 16 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
yii实现使用CUploadedFile上传文件的方法
Dec 28 PHP
Linux安装配置php环境的方法
Jan 14 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
php函数传值的引用传递注意事项分析
Jun 25 PHP
php简单随机字符串生成方法示例
Apr 19 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
PHP容器类的两种实现方式示例
Jul 24 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 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/01 无线电
PHP读取XML值的代码(推荐)
2011/01/01 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
八年级数学教学反思
2014/01/31 职场文书
《九色鹿》教学反思
2014/02/27 职场文书
广播体操口号
2014/06/18 职场文书
创新社会管理心得体会
2014/09/12 职场文书
2014年设计师工作总结
2014/11/25 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
Django使用redis配置缓存的方法
2021/06/01 Redis
一文弄懂MySQL索引创建原则
2022/02/28 MySQL