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 相关文章推荐
图象函数中的中文显示
Oct 09 PHP
php字符串截取中文截取2,单字节截取模式
Dec 10 PHP
一个PHP的String类代码
Apr 20 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
微信支付开发教程(一)微信支付URL配置
May 28 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
PHP间隔一段时间执行代码的方法
Dec 02 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
Laravel框架学习笔记之批量更新数据功能
May 30 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 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中smarty模板条件判断用法实例
2015/06/11 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
php while循环控制的简单实例
2016/05/30 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
js实现旋转木马效果
2017/03/17 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
webpack+vue.js构建前端工程化的详细教程
2020/05/10 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
Python不规范的日期字符串处理类
2014/06/10 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
Python3 assert断言实现原理解析
2020/03/02 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
python中的插入排序的简单用法
2021/01/19 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
大学毕业生通用自我评价
2014/01/05 职场文书
基层干部十八大感言
2014/01/19 职场文书
公司员工活动策划方案
2014/08/20 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js
redis中lua脚本使用教程
2021/11/01 Redis
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL