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新手上路(二)
Oct 09 PHP
PHP的array_diff()函数在处理大数组时的效率问题
Nov 27 PHP
PHP三元运算符的结合性介绍
Jan 10 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
Jul 02 PHP
php中选择什么接口(mysql、mysqli)访问mysql
Feb 06 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
Jun 28 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
java模拟PHP的pack和unpack类
Apr 13 PHP
php微信公众平台开发(四)回复功能开发
Dec 06 PHP
PHP join()函数用法与实例讲解
Mar 11 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
珊瑚虫IP库浅析
2007/02/15 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
Python实现从URL地址提取文件名的方法
2015/05/15 Python
Python实现完整的事务操作示例
2017/06/20 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
TensorFlow实现模型评估
2018/09/07 Python
django框架ModelForm组件用法详解
2019/12/11 Python
pytorch 求网络模型参数实例
2019/12/30 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
校园广播稿精选
2014/10/01 职场文书
2014年领班工作总结
2014/11/25 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
中学生运动会广播稿
2015/08/19 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书