PHP中strlen()和mb_strlen()的区别浅析


Posted in PHP onJune 19, 2014

在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:

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简单命令代码集锦
Sep 24 PHP
php 什么是PEAR?(第二篇)
Mar 19 PHP
php中邮箱地址正则表达式实现与详解
Apr 24 PHP
PHP设计模式之责任链模式的深入解析
Jun 13 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
深入浅析php json 格式控制
Dec 24 PHP
实例详解PHP中html word 互转的方法
Jan 28 PHP
php+ajax登录跳转登录实现思路
Jul 31 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
PHP编程实现脚本异步执行的方法
Aug 09 PHP
Yii2 queue的队列使用详解
Jul 19 PHP
PHP如何开启Opcache功能提升程序处理效率
Apr 27 PHP
php对包含html标签的字符串进行截取的函数分享
Jun 19 #PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 #PHP
PHP base64编码后解码乱码的解决办法
Jun 19 #PHP
PHP安全的URL字符串base64编码和解码
Jun 19 #PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 #PHP
ThinkPHP模板引擎之导入资源文件方法详解
Jun 18 #PHP
ThinkPHP CURD方法之field方法详解
Jun 18 #PHP
You might like
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
python操作xml文件详细介绍
2014/06/09 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
python提取xml里面的链接源码详解
2019/10/15 Python
Django数据统计功能count()的使用
2020/11/30 Python
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
大学迎新标语
2014/06/26 职场文书
品牌转让协议书
2014/08/20 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
婚庆答谢词
2015/01/04 职场文书
客房服务员岗位职责
2015/02/09 职场文书
旅游项目合作意向书
2015/05/08 职场文书
圣诞晚会主持词
2015/07/01 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
Oracle中update和select 关联操作
2022/01/18 Oracle