PHP字符串长度计算 - strlen()函数使用介绍


Posted in PHP onOctober 15, 2013

strlen()函数和mb_strlen()函数

在PHP中,函数strlen()返回字符串的长度。函数原型如下:

int strlen(string string_input);

参数string_input为要处理的字符串。

strlen()函数返回字符串所占的字节长度,一个英文字母、数字、各种符号均占一个字节,它们的长度均为1。一个中午字符占两个字节,所以一个中午字符的长度是2。例如

<?php 
echo strlen("www.sunchis.com"); 
echo strlen("三知开发网"); 
?>

“echo strlen("www.sunchis.com");”的运行结果:15

“echo strlen("三知开发网");”的运行结果:15

这里有一个疑问,一个中文字符不是占2个字节吗?“三知开发网”,明明是五个汉字,运行的结果怎么会是15?

原因出在这里:strlen()计算时,对于一个UTF-8的中文字符,会把它当做长度为3来处理。当出现中英文混排的情况下,怎么准确的计算字符串的长度呢?这里,得引入另外一个函数mb_strlen()。mb_strlen()函数的用法与strlen()几乎一摸一样,只是多了一个指定字符集编码的参数。函数原型为:

int mb_strlen(string string_input, string encode);

PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在UTF-8编码下,一个汉字占3个字节)。 因此,下面的代码能准确计算出中文字符串的长度:
<?php 
$str = "三知sunchis开发网"; 
echo strlen($str)."<br>"; //结果:22 
echo mb_strlen($str,"UTF8")."<br>"; //结果:12 
$strlen = (strlen($str)+mb_strlen($str,"UTF8"))/2; 
echo $strlen; //结果:17 
?>

原理分析:

strlen()计算时,对待UTF-8的中文字符长度是3,所以“三知sunchis开发网”的长度为5×3+7×1=22
在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“三知sunchis开发网”长度为5×1+7×1=12

剩下的就是纯数学问题了,在此就不??铝恕?

注意:对于mb_strlen($str,'UTF-8'),如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到。需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函数的问题。

PHP 相关文章推荐
使用php来实现网络服务
Sep 15 PHP
PHP校验ISBN码的函数代码
Jan 17 PHP
php中转义mysql语句的实现代码
Jun 24 PHP
PHP中使用unset销毁变量并内存释放问题
Jul 05 PHP
php 操作调试的方法
Jul 12 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
Jan 11 PHP
PHP设计模式之解释器模式的深入解析
Jun 13 PHP
CURL状态码列表(详细)
Jun 27 PHP
跟我学Laravel之快速入门
Oct 15 PHP
PHP获取文本框、密码域、按钮的值实例代码
Apr 19 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
基于php伪静态的实现方法解析
Jul 31 PHP
php后台如何避免用户直接进入方法实例
Oct 15 #PHP
php下拉选项的批量操作的实现代码
Oct 14 #PHP
php登陆页的密码处理方式分享
Oct 14 #PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 #PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 #PHP
php检测网页是否被百度收录的函数代码
Oct 09 #PHP
php MessagePack介绍
Oct 06 #PHP
You might like
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
es6中let和const的使用方法详解
2020/02/24 Javascript
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
python实现定时同步本机与北京时间的方法
2015/03/24 Python
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
详解python实现线程安全的单例模式
2018/03/05 Python
将python代码和注释分离的方法
2018/04/21 Python
python3+PyQt5实现柱状图
2018/04/24 Python
python os用法总结
2018/06/08 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
Django-imagekit的使用详解
2020/07/06 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
会计专业毕业生推荐信
2013/11/05 职场文书
铁路工务反思材料
2014/02/07 职场文书
家属答谢词
2015/01/05 职场文书
班主任寄语2015
2015/02/26 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
李强感恩观后感
2015/06/17 职场文书
保护环境建议书作文500字
2015/09/14 职场文书