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 imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
PHP调用Linux命令权限不足问题解决方法
Feb 07 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
PHP实现的激活用户注册验证邮箱功能示例
Jun 06 PHP
PHP中的访问修饰符简单比较
Feb 02 PHP
Laravel框架实现文件上传的方法分析
Sep 29 PHP
laravel 操作数据库常用函数的返回值方法
Oct 11 PHP
详细分析PHP 命名空间(namespace)
Jun 30 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 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
星际争霸任务指南——虫族
2020/03/04 星际争霸
繁体中文转换为简体中文的PHP函数
2006/10/09 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
PHP简单遍历对象示例
2016/09/28 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
angular 服务随记小结
2019/05/06 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
python将人民币转换大写的脚本代码
2013/02/10 Python
python网络编程示例(客户端与服务端)
2014/04/24 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
python递归下载文件夹下所有文件
2019/08/31 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
解决Django中checkbox复选框的传值问题
2020/03/31 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
html5使用canvas画一条线
2014/12/15 HTML / CSS
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
求职简历自我评价怎么写
2015/03/10 职场文书