黑马程序员技术交流社区

标题: 细说PHP中strlen和mb_strlen函数的区别 [打印本页]

作者: 天宝    时间: 2016-9-16 22:28
标题: 细说PHP中strlen和mb_strlen函数的区别
在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别...
先看例子:
<?php  

$str='中文a字1符';  

echo strlen($str).'<br>';//14

echo mb_strlen($str,'utf8').'<br>';//6

echo mb_strlen($str,'gbk').'<br>';//8

echo mb_strlen($str,'gb2312').'<br>';//10
?>

分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14,在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6 .

利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1)

echo (strlen($str) + mb_strlen($str,'UTF8')) / 2;
例如 “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是10.

PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得 到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在 UTF-8编码下,一个汉字占3个字节)。

对于新人而言,我觉得打好基础才是最关键的,后面针对工作的学习内容还是不要太早去接触,培训初期好好听课,学好每一个知识点!

作者: 踏上PHP征程    时间: 2016-12-18 16:22
谢谢分享
作者: 290422624    时间: 2016-12-22 17:45
跟着大神打天下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2