字符串长度函数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基础知识:类与对象(5) static
Dec 13 PHP
PHP无限分类的类
Jan 02 PHP
PHP 分页类(模仿google)-面试题目解答
Sep 13 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
探讨php define()函数及defined()函数使用详解
Jun 09 PHP
php缓存技术详细总结
Aug 07 PHP
php生成数组的使用示例 php全组合算法
Jan 16 PHP
PHP 函数call_user_func和call_user_func_array用法详解
Mar 02 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 PHP
PDO实现学生管理系统
Mar 21 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
linux下安装php的memcached客户端
2014/08/03 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
Material(包括Material Icon)在Angular2中的使用详解
2018/02/11 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
初步解析Python中的yield函数的用法
2015/04/03 Python
Python常见排序操作示例【字典、列表、指定元素等】
2018/08/15 Python
Python rstrip()方法实例详解
2018/11/11 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
基于Python实现扑克牌面试题
2019/12/11 Python
python实现横向拼接图片
2020/03/23 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
Python 图片处理库exifread详解
2021/02/25 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
师范大学毕业自我鉴定
2013/11/21 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
2015年技术员工作总结
2015/04/10 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers