解读PHP中strlen和mb_strlen函数的区别

时间:2016-11-20 14:44:31 类型:PHP
字号:    

在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个字节)。

更多IT技术,请点击:http://www.ncyteng.com