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 全文搜索和替换的实现代码
Jul 29 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
php实现天干地支计算器示例
Mar 14 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
php按单词截取字符串的方法
Apr 07 PHP
PHP的命令行命令使用指南
Aug 18 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
配置Nginx+PHP的正确思路与过程
May 10 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
Jan 15 PHP
php curl获取到json对象并转成数组array的方法
May 31 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 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中截取字符串支持utf-8
2007/01/18 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
用Webpack构建Vue项目的实践
2017/11/07 Javascript
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
python僵尸进程产生的原因
2017/07/21 Python
Python实现多进程共享数据的方法分析
2017/12/04 Python
python 列表降维的实例讲解
2018/06/28 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
英语专业毕业生自我鉴定
2013/11/09 职场文书
演讲主持词
2014/03/18 职场文书
机房搬迁方案
2014/05/01 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
县级文明单位申报材料
2014/05/23 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
诚信高考倡议书
2019/06/24 职场文书
用Python提取PDF表格的方法
2021/04/11 Python