字符串长度函数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 高手之路(二)
Oct 09 PHP
PHP 全角转半角实现代码
May 16 PHP
php简单提示框alert封装函数
Aug 08 PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 PHP
PHP时间类完整实例(非常实用)
Dec 25 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
Nov 05 PHP
php pdo操作数据库示例
Mar 10 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
Jan 20 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 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如何编写易读的代码
2007/07/10 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
php显示页码分页类的封装
2017/06/08 PHP
DOM 基本方法
2009/07/18 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
js中window.open打开一个新的页面
2014/08/10 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
Python入门学习之字符串与比较运算符
2015/10/12 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
Python实现FM算法解析
2019/06/18 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
python 实现list或string按指定分段
2019/12/25 Python
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
保安部任务及岗位职责
2014/02/25 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
舞蹈教育学专业求职信
2014/06/29 职场文书
军训通讯稿范文
2015/07/18 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技