一,strlen和mb_strlen一般用于求字符串的长度,区别在于这个长度的如何定义。
1,strlen是按照字节长度来判断字符串长度,即一个字节就一个长度,所以适合用来判断ASCII表中的字符长度,但是对于中文却不一样了,后面会讲到。
2,mb_strlen是按照字符的编码单位字节数来判断字符串长度的,utf-8编码一个中文字符占3个字节,所以3个字节才算一个字符;EUC-CN(gb2312的另一种说法)编码一个中文占2个字节,所以2个字节才算一个字符。
下面来验证一下
二,strlen函数
1,准备工作
$str="中文"; echo "\n-----str--------\n"; echo $str; echo "\n-------------\n"; $encode = mb_detect_encoding($str, array("ASCII","UTF-8","EUC-CN","GB2312","GBK","BIG5")); if(!$encode){ $encode = "UTF-8"; } echo "\n------encode-------\n"; echo $encode; echo "\n------strlen-------\n"; echo strlen($str); echo "\n-------------\n";
2,在utf-8编码下测试结果如下,2个中文字节长度为6,因为stlen是按字节计算字符串长度的,utf-8编码一个中文占3个字节
[weblogic@v0A-123-177-206 test]$ php test.php -----str-------- 中文 ------------- ------encode------- UTF-8 ------strlen------- 6 -------------
3,在EUC-CN编码下测试结果如下,2个中文字节长度为4,因为stlen是按字节计算字符串长度的,EUC-CN编码一个中文占2个字节
[weblogic@v0A-123-177-206 test]$ php test.php -----str-------- 中文 ------------- ------encode------- EUC-CN ------strlen------- 4 -------------
三,mb_strlen函数
1,准备工作
$str="中文"; echo "\n-----str--------\n"; echo $str; echo "\n-------------\n"; $encode = mb_detect_encoding($str, array("ASCII","UTF-8","EUC-CN","GB2312","GBK","BIG5")); if(!$encode){ $encode = "UTF-8"; } echo "\n------encode-------\n"; echo $encode; echo "\n------strlen-------\n"; echo strlen($str); echo "\n-------------\n"; echo "\n------mb_strlen-------\n"; echo mb_strlen($str,$encode); echo "\n-------------\n";
2,在utf-8编码下测试结果如下,2个中文字节长度为6,字符串长度为2,因为mb_stlen是按字符编码的单位字节数计算字符串长度的
[weblogic@v0A-123-177-206 test]$ php test.php -----str-------- 中文 ------------- ------encode------- UTF-8 ------strlen------- 6 ------------- ------mb_strlen------- 2 -------------
3,在EUC-CN编码下测试结果如下,2个中文字节长度为4,字符串长度为2,因为mb_stlen是按字符编码的单位字节数计算字符串长度的
[weblogic@v0A-123-177-206 test]$ php test.php -----str-------- 中文 ------------- ------encode------- EUC-CN ------strlen------- 4 ------------- ------mb_strlen------- 2 -------------
三,后记
在判断一个包含中英文的字符串长度时,使用strlen是不恰当的,mb_strlen才是正确的
正确代码:
$str="12ab中文"; echo "\n-----str--------\n"; echo $str; echo "\n-------------\n"; $encode = mb_detect_encoding($str, array("ASCII","UTF-8","EUC-CN","GB2312","GBK","BIG5")); if(!$encode){ $encode = "UTF-8"; } echo "\n------encode-------\n"; echo $encode; echo "\n------strlen-------\n"; echo strlen($str); echo "\n-------------\n"; echo "\n------mb_strlen-------\n"; echo mb_strlen($str,$encode); echo "\n-------------\n";
输出如下:
[weblogic@v0A-123-177-206 test]$ php test.php -----str-------- 12ab中文 ------------- ------encode------- UTF-8 ------strlen------- 10 ------------- ------mb_strlen------- 6 -------------
Leave a Reply