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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个包含中英文的字符串如何获得它的自然长度相关的知识,希望对你有一定的参考价值。

$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。

 

以上是关于一个包含中英文的字符串如何获得它的自然长度的主要内容,如果未能解决你的问题,请参考以下文章

如何在本机代码中传递数组数组

如何将字符串数据从活动发送到片段?

第2题——DNA片段

干货通俗理解自然语言处理中N-Gram模型

Android - 如何显示包含从片段中获取的字符串的快餐栏

2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试