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 相关文章推荐
Content-type 的说明
Oct 09 PHP
一个程序下载的管理程序(一)
Oct 09 PHP
基于PHP5魔术常量与魔术方法的详解
Jun 13 PHP
使用PHP实现Mysql读写分离
Jun 28 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
PHP代码优化的53个细节
Mar 03 PHP
php时间戳转换的示例
Mar 31 PHP
PHP中array_slice函数用法实例详解
Nov 25 PHP
php遍历删除整个目录及文件的方法
Mar 13 PHP
php简单备份与还原MySql的方法
May 09 PHP
Laravel 实现密码重置功能
Feb 23 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
2014/07/18 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
html判断当前页面是否在iframe中的实例
2016/11/30 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
cropper js基于vue的图片裁剪上传功能的实现代码
2018/03/01 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
vue实现放大镜效果
2020/09/17 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
详解Python中列表和元祖的使用方法
2015/04/25 Python
python简单实现获取当前时间
2016/08/27 Python
Python自动化开发学习之三级菜单制作
2017/07/14 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
毕业生求职的求职信
2013/12/05 职场文书
领导干部培训感言
2014/01/23 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
酒店总经理助理职责
2014/02/12 职场文书
安卓程序员求职信
2014/02/28 职场文书
毕业生工作求职信
2014/06/30 职场文书
整改落实自查报告
2014/11/05 职场文书
文明旅游倡议书
2015/04/28 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
公司与个人合作协议书
2016/03/19 职场文书