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 相关文章推荐
Apache设置虚拟WEB
Oct 09 PHP
php基础知识:类与对象(5) static
Dec 13 PHP
用PHP将数据导入到Foxmail的实现代码
Sep 05 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
Jul 28 PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
PHP实现无限极分类图文教程
Nov 25 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
PHP 无限级分类
May 04 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
详解phpstorm2020最新破解方法
Sep 17 PHP
php 解析非标准json、非规范json
Apr 01 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写的采集程序
2007/03/16 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
React中的render何时执行过程
2018/04/13 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
python基于Tkinter库实现简单文本编辑器实例
2015/05/05 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
python实现自动登录后台管理系统
2018/10/18 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
阿迪达斯越南官网:adidas越南
2020/07/19 全球购物
我的梦中国梦演讲稿
2014/04/23 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
Docker部署Mysql8的实现步骤
2022/07/07 Servers
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers