于振海网——于振海的个人博客搜索

php中strlen和mb_strlen比较

发布时间:2012年8月11日  更新时间:2024年6月20日
作者:未知  文章ID:4765  浏览:

    当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。(测试时编码方式是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 floor() 函数
  • 下一篇:考研不应该成为大学生逃避社会的牺牲品
  • 【推荐文章】

  • vb搜索文件模块,利用api搜索的高效率代码

    Private lindex As Long Private Pflag As Boolean Private Declare Function FindFir...

  • 尊重别人就等于尊重自己

    一天下午,一位穿得很时髦的中年女人带着一个小男孩走进美国著名企业亚联集团总部大厦...

  • 王禹偁《官舍竹》赏析

    【原文】 官舍竹 王禹偁 谁种萧萧数百竿?伴吟偏称作闲官①。 不随夭艳争春色,独守...

  • 中国近代科学为什么落后了?

    中国古代有着灿烂的文明,是世界四大文明古国之一,在16世纪以前长达1千多年的时期内...

  • 我们为什么活着

    2008年华尔街金融风暴袭来,美国一家电器制造公司倒闭,公司总裁卡来尔来到多伦斯湖准...

  • Windows XP查看本机IP地址、MAC地址、网关、D

    点击【开始】,然后点击【运行】,在输入栏输入cmd三个字母,在打开的窗口中输入ipcon...

  • 【最新文章】

  • php中strlen和mb_strlen比较
  • 白太阳
  • 三个月宝宝大便绿色的一点知识
  • 三个月宝宝大便黑色的一点知识
  • 中儒林古墓葬群
  • 千人洞旧石器文化遗迹
  • 沂源猿人
  • 宇宙起源于一次大爆炸吗?
  • 人类啊,你在何方?
  • 八难求婚使者
  • 随笔
  • 因为山在那里
  • 环境描写要注意的问题
  • 失败是成功的先导
  • 离太阳最近的树