字符串长度函数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 相关文章推荐
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
使用php重新实现PHP脚本引擎内置函数
Mar 06 PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
PHP实现事件机制的方法
Jul 10 PHP
ThinkPHP中session函数详解
Sep 14 PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 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
农民C键的运用技巧
2020/03/04 星际争霸
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
PHP中16个高危函数整理
2019/09/19 PHP
javascript第一课
2007/02/27 Javascript
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
python实现根据图标提取分类应用程序实例
2014/09/28 Python
Python的迭代器和生成器
2015/07/29 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
环保倡议书500字
2014/05/15 职场文书
标准单位租车协议书
2014/09/23 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
某某店铺的开业庆典主持词范本
2019/11/25 职场文书
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android