1,861   PHP

一,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

Your email address will not be published. Required fields are marked *