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
phpBB BBcode处理的漏洞
Oct 09 PHP
不要轻信 PHP_SELF的安全问题
Sep 05 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
PHP加密函数 Javascript/Js 解密函数
Sep 23 PHP
PHP面向对象之旅:深入理解static变量与方法
Jan 06 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
php图片添加水印例子
Jul 20 PHP
PHP中Trait及其应用详解
Feb 14 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
PHP培训要多少钱
Jun 06 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登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
JavaScript根据数据生成百分比图和柱状图的实例代码
2013/07/14 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
浅谈JS运算符&amp;&amp;和|| 及其优先级
2016/08/10 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
python 字符串格式化代码
2013/03/17 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
python实现图像识别功能
2018/01/29 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
python web框架中实现原生分页
2019/09/08 Python
pymysql模块的操作实例
2019/12/17 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
python线程优先级队列知识点总结
2021/02/28 Python
师恩难忘教学反思
2014/04/27 职场文书
爱的承诺书
2015/01/20 职场文书
党员心得体会范文2016
2016/01/23 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python