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 相关文章推荐
ThinkPHP关联模型操作实例分析
Sep 23 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
Jun 09 PHP
php从数据库查询结果生成树形列表的方法
Apr 17 PHP
php生成高清缩略图实例详解
Dec 07 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
Yii2中使用asset压缩js,css文件的方法
Nov 24 PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 PHP
php+ajax实现异步上传文件或图片功能
Jul 18 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 PHP
php写入文件不覆盖的实例讲解
Sep 17 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 PHP
php自动加载代码实例详解
Feb 26 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
mysql时区问题
2008/03/26 PHP
PHP原生函数一定好吗?
2014/12/08 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
PHP生成压缩文件实例
2015/02/07 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
解析javascript 实用函数的使用详解
2013/05/10 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
Python中的魔法方法深入理解
2014/07/09 Python
Python中Random和Math模块学习笔记
2015/05/18 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
护理自荐信
2013/10/22 职场文书
中专生学习生活的自我评价分享
2013/10/27 职场文书
物流创业计划书
2014/02/01 职场文书
妈妈活动方案
2014/08/15 职场文书
教书育人演讲稿
2014/09/11 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
投标单位介绍信
2015/05/05 职场文书
学校教学工作总结2015
2015/05/19 职场文书
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js