字符串长度函数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大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
php数组函数序列之array_search()- 按元素值返回键名
Nov 04 PHP
ajax取消挂起请求的处理方法
Mar 18 PHP
PHP用身份证号获取星座和生肖的方法
Nov 07 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
PHP 正则表达式小结
Feb 12 PHP
php生成图片缩略图的方法
Apr 07 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
PHP操作路由器实现方法示例
Apr 27 PHP
Yii2框架自定义类统一处理url操作示例
May 25 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
玩转虚拟域名◎+ .
2006/10/09 PHP
php下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
php将会员数据导入到ucenter的代码
2010/07/18 PHP
php不写闭合标签的好处
2014/03/04 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
js获取提交的字符串的字节数
2009/02/09 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
python中关于for循环的碎碎念
2017/06/30 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
PageFactory设计模式基于python实现
2020/04/14 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
UNIX文件系统常用命令
2012/05/25 面试题
单位成立周年感言
2014/01/26 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
2014年老干部工作总结
2014/11/21 职场文书
大学生在校表现评语
2014/12/31 职场文书
学术研讨会欢迎词
2015/01/26 职场文书