字符串长度函数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 相关文章推荐
BBS(php &amp; mysql)完整版(二)
Oct 09 PHP
让你的网站首页自动选择语言转跳
Dec 06 PHP
php 取得瑞年与平年的天数的代码
Aug 10 PHP
php中var_export与var_dump的区别分析
Aug 21 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
关于zend studio 出现乱码问题的总结
Jun 23 PHP
php中http与https跨域共享session的解决方法
Dec 20 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
PHP的自定义模板引擎
Mar 24 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
php中数组最简单的使用方法
Dec 27 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
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
php类的定义与继承用法实例
2015/07/07 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
javascript数据类型详解
2017/02/07 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
js仿淘宝放大镜效果
2020/12/28 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
python/sympy求解矩阵方程的方法
2018/11/08 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
python圣诞树编写实例详解
2020/02/13 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
大学自我鉴定
2013/12/20 职场文书
《海底世界》教学反思
2014/04/16 职场文书
开发房地产协议书
2014/09/14 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书