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学习 函数 课件
Jun 15 PHP
PHP similar_text 字符串的相似性比较函数
May 26 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
Jul 01 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
简单介绍PHP非阻塞模式
Mar 03 PHP
PHP对象链式操作实现原理分析
Oct 09 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
ecshop添加菜单及权限分配问题
Nov 21 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
YII分模块加载路由的实现方法
Oct 01 PHP
thinkphp3.2框架中where条件查询用法总结
Aug 13 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新手上路(十)
2006/10/09 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
不安全的常用的js写法
2009/09/15 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
range 标准化之获取
2011/08/28 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
详解JavaScript中Hash Map映射结构的实现
2016/05/21 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
实例教学如何写vue插件
2017/11/30 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
Jquery获取radio选中值实例总结
2019/01/17 jQuery
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
[01:55]2014DOTA2国际邀请赛快报:国土生病 紧急去医院治疗
2014/07/10 DOTA
Python3基础之条件与循环控制实例解析
2014/08/13 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
中层竞聘演讲稿
2014/01/09 职场文书
先进班组事迹材料
2014/12/25 职场文书
自主招生自荐信格式
2015/03/04 职场文书
导游词之潮音寺
2019/09/26 职场文书