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下一个非常全面获取图象信息的函数
Nov 20 PHP
一个php Mysql类 可以参考学习熟悉下
Jun 21 PHP
PHP小程序自动提交到自助友情连接
Nov 24 PHP
一步一步学习PHP(7) php 字符串相关应用
Mar 05 PHP
Views rows style模板重写代码
May 16 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
Mar 27 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
May 12 PHP
微信公众号开发之文本消息自动回复php代码
Aug 08 PHP
php实现将二维关联数组转换成字符串的方法详解
Jul 31 PHP
PHP实现简单的模板引擎功能示例
Sep 02 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 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
第六节 访问属性和方法 [6]
2006/10/09 PHP
实用函数7
2007/11/08 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
PDO::lastInsertId讲解
2019/01/29 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
laravel-admin 中列表筛选方法
2019/10/03 PHP
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
js三种排序算法分享
2012/08/16 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
精伦电子Java笔试题
2013/01/16 面试题
港湾网络笔试题
2014/04/19 面试题
优秀中学生事迹材料
2014/01/31 职场文书
工会主席岗位责任制
2014/02/11 职场文书
班组长竞聘书
2014/03/31 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
化工工艺设计求职信
2014/06/25 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js
python中filter,map,reduce的作用
2022/06/10 Python