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中的实现trim函数代码
Mar 19 PHP
MySQL授权问题总结
May 06 PHP
MySql中正则表达式的使用方法描述
Jul 30 PHP
使用PHP获取网络文件的实现代码
Jan 01 PHP
windows下升级PHP到5.3.3的过程及注意事项
Oct 12 PHP
php fsockopen伪造post与get方法的详解
Jun 14 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
php定时执行任务设置详解
Feb 06 PHP
php延迟静态绑定实例分析
Feb 08 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
Apr 30 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 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脚本加密专家php解密算法
2020/09/13 PHP
php 网上商城促销设计实例代码
2012/02/17 PHP
php常用正则函数实例小结
2016/12/29 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
在jQuery 1.5中使用deferred对象的代码(翻译)
2011/03/10 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
微信小程序实现星星评价效果
2018/11/02 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
深入理解Python对Json的解析
2017/02/14 Python
python开发简易版在线音乐播放器
2017/03/03 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
Python下载网络小说实例代码
2018/02/03 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
百丽国际旗下购物网站:优购
2017/02/28 全球购物
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
请介绍一下Ant
2016/07/22 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
自我鉴定怎么写
2014/01/12 职场文书
论文诚信承诺书
2014/05/23 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
python中print格式化输出的问题
2021/04/16 Python
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle