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 相关文章推荐
MySQL数据源表结构图示
Jun 05 PHP
php 404错误页面实现代码
Jun 22 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
Jun 13 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP反射学习入门示例
Jun 14 PHP
yii2 在控制器中验证请求参数的使用方法
Jun 19 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出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
php实现使用正则将文本中的网址转换成链接标签
2014/12/03 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
javascript事件问题
2009/09/05 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
js实现进度条的方法
2015/02/13 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
分享Python开发中要注意的十个小贴士
2016/08/30 Python
Python单体模式的几种常见实现方法详解
2017/07/28 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
django中间键重定向实例方法
2019/11/10 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
祖国在我心中的演讲稿
2014/05/04 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
办公室主任岗位职责
2015/01/31 职场文书
公司仓库管理制度
2015/08/04 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
详解Vue的列表渲染
2021/11/20 Vue.js
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python