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和MySQL保存和输出图片
Oct 09 PHP
php中拷贝构造函数、赋值运算符重载
Jul 25 PHP
浅析PHP中Collection 类的设计
Jun 21 PHP
php加密解密实用类分享
Jan 07 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
配置Nginx+PHP的正确思路与过程
May 10 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 PHP
自制PHP框架之模型与数据库
May 07 PHP
浅析PHP数据导出知识点
Feb 17 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
Oct 11 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/05/10 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
jquery插件之文字间歇自动向上滚动效果代码
2016/02/25 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
python实现斐波那契递归函数的方法
2014/09/08 Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
mac下如何将python2.7改为python3
2018/07/13 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
python的列表List求均值和中位数实例
2020/03/03 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
2016/07/13 HTML / CSS
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
什么是.net
2015/08/03 面试题
写给爸爸的道歉信
2014/01/15 职场文书
大学生个人自荐信
2014/02/24 职场文书
青春励志演讲稿
2014/04/29 职场文书
小学师德师风整改措施
2014/10/27 职场文书
调解协议书范本
2016/03/21 职场文书
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android