php strlen mb_strlen计算中英文混排字符串长度


Posted in PHP onJuly 10, 2009

比较strlen和mb_strlen
当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。(测试时编码方式是UTF8)

<?php 
$str=‘中文a字1符‘; 
echo strlen($str); 
echo ‘<br />‘; 
echo mb_strlen($str,‘UTF8‘); 
//输出结果 
//14 
//6 
?>

结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14
在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6
关于中英文混排串的占位符计算:
利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1),计算的方法是:如果一个混排字符串有a个中文,b个英文,占位是:
<?php 
$str=‘中文a字1符‘; 
//计算如下 
echo (strlen($str) + mb_strlen($str,‘UTF8‘)) / 2; 
echo 
//输出结果 
//10 
?>

例如 “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是10.
附网站的一篇文章:
还是有关中文的问题。PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在UTF-8编码下,一个汉字占3个字节)。

采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到。需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函数的问题。

PHP 相关文章推荐
一个php作的文本留言本的例子(四)
Oct 09 PHP
PHP完整的日历类(CLASS)
Nov 27 PHP
php跨域cookie共享使用方法
Feb 20 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
php给图片加文字水印
Jul 31 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
php模板引擎技术简单实现
Mar 15 PHP
PHP连接数据库实现注册页面的增删改查操作
Mar 27 PHP
THINKPHP截取中文字符串函数实例代码
Mar 20 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 PHP
如何理解PHP核心特性命名空间
May 28 PHP
UTF8编码内的繁简转换的PHP类
Jul 09 #PHP
PHP 程序授权验证开发思路
Jul 09 #PHP
php 论坛采集程序 模拟登陆,抓取页面 实现代码
Jul 09 #PHP
程序员编程十条戒律
Jul 09 #PHP
php 执行系统命令的方法
Jul 07 #PHP
PHP 页面跳转到另一个页面的多种方法方法总结
Jul 07 #PHP
php 多个submit提交表单 处理方法
Jul 07 #PHP
You might like
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
Django视图扩展类知识点详解
2019/10/25 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
利用python 读写csv文件
2020/09/10 Python
Python基于内置函数type创建新类型
2020/10/22 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
中专生学习生活的自我评价分享
2013/10/27 职场文书
优秀毕业大学生推荐信
2013/11/13 职场文书
办公室驾驶员岗位职责
2013/11/15 职场文书
大学生的自我鉴定范文
2014/01/21 职场文书
自荐信写法介绍
2014/01/25 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
公务员个人年终总结
2015/02/12 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技