首页 > 代码库 > 一个包含中英文的字符串如何获得它的自然长度

一个包含中英文的字符串如何获得它的自然长度

$str = ‘Hello world!‘;
echo strlen($str); // 输出12

然而在PHP自带的函数中,strlen及mb_strlen都是通过计算字符串所占字节数来计算长度的,在不同的编码情况下,中文所占的字节数是不同的。在GBK/GB2312下,中文字符占2个字节,而在UTF-8下,中文字符占3个字节。

$str = ‘你好,世界!‘;
echo strlen($str); // GBK或GB2312下输出12,UTF-8下输出18

而我们在判断字符串长度时往往需要判断的是字符的数量,而非字符串所占字节数,如在UTF-8下的这段PHP代码:

$name = ‘张耕畅‘;
$len = strlen($name);
// 输出 FALSE,因为在UTF-8下三个中文占9个字节
if($len >= 3 && $len <= 8){
 echo ‘TRUE‘;
}else{
 echo ‘FALSE‘;
}
<?php  
/** 
 * 获取包含中英文的字符串长度 
 */  
$str = ‘测试abc123‘;  
echo strlen($str)."<br>";  
echo mb_strlen($str,‘utf-8‘);  
?> 

输出结果为12和8,PHP自带的函数strlen()是通过计算字符串所占字节数来统计字符串长度的,一个英文字符占1字节,而中文则不然,在gbk编码下每个中文字符所占字节为2,而在utf-8编码下每个中文字符所占字节为3,测试代码用的UTF-8编码,所以输出12,函数mb_strlen(string $str[,string $encoding = mb_internal_encoding()])需要扩展库mb_string.dll才能使用,第一个参数str是要检查长度的字符串,第二个参数encoding为字符编码,如果省略,则使用内部字符编码,函数返回具有encoding编码的字符串str包含的字符数,多字节的字符被计为1,如果给定的encoding无效则返回FALSE,所以输出结果为8。

 

一个包含中英文的字符串如何获得它的自然长度