字符串长度函数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 相关文章推荐
我的论坛源代码(二)
Oct 09 PHP
PHP 错误之引号中使用变量
May 04 PHP
php将数据库中所有内容生成静态html文档的代码
Apr 12 PHP
php批量缩放图片的代码[ini参数控制]
Feb 11 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
php使用glob函数快速查询指定目录文件的方法
Nov 15 PHP
PHP5.3以上版本安装ZendOptimizer扩展
Mar 27 PHP
浅谈PHP中其他类型转化为Bool类型
Mar 28 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 PHP
PHP策略模式写法
Apr 01 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
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
php代码架构的八点注意事项
2016/01/25 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
Script的加载方法小结
2011/01/12 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
Python获取系统默认字符编码的方法
2015/06/04 Python
详解python的数字类型变量与其方法
2016/11/20 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
表演方阵解说词
2014/02/08 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
2014年服务员工作总结
2014/11/18 职场文书
社区好人好事材料
2014/12/26 职场文书
高三生物教学反思
2016/02/22 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏