字符串长度函数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 fsockopen写的HTTP下载的类
Feb 22 PHP
php中文字母数字验证码实现代码
Apr 25 PHP
php遍历数组的方法分享
Mar 22 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
php格式化日期和时间格式化示例分享
Feb 24 PHP
php代码审计比较有意思的例子
May 07 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
php中使用session防止用户非法登录后台的方法
Jan 27 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
laravel框架中视图的基本使用方法分析
Nov 23 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
php 常用字符串函数总结
2008/03/15 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
JSONP跨域请求
2017/03/02 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
Python的一些用法分享
2012/10/07 Python
python文件写入实例分析
2015/04/08 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
Python读取指定日期邮件的实例
2019/02/01 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
外语系毕业生自荐信范文
2013/12/16 职场文书
竞选演讲稿范文
2013/12/28 职场文书
大学生演讲稿范文
2014/01/11 职场文书
班风学风建设方案
2014/05/06 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
师德承诺书
2015/01/20 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
早上好问候语大全
2015/11/10 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang