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笔记之:php数组相关函数的使用
Apr 26 PHP
浅析十款PHP开发框架的对比
Jul 05 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
php生成固定长度纯数字编码的方法
Jul 09 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
php array_pop 删除数组最后一个元素实例
Nov 02 PHP
PHP二维关联数组的遍历方式(实例讲解)
Oct 18 PHP
laravel 框架配置404等异常页面
Jan 07 PHP
PHP下载大文件失败并限制下载速度的实例代码
May 10 PHP
PHP面向对象程序设计重载(overloading)操作详解
Jun 13 PHP
PHP的静态方法与普通方法用法实例分析
Sep 26 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 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
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
深入解析Python中的urllib2模块
2015/11/13 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
python url 参数修改方法
2018/12/26 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
Python telnet登陆功能实现代码
2020/04/16 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
没编程基础可以学python吗
2020/06/17 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
担保书格式及范文
2014/04/01 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
优秀共产党员演讲稿
2014/09/04 职场文书
志愿者工作心得体会
2016/01/15 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
详解nginx进程锁的实现
2021/06/14 Servers
golang中的struct操作
2021/11/11 Golang
MySQL分区路径子分区再分区
2022/04/13 MySQL