如何在将字符引用计为单个字符时获取包含字符引用的字符串的长度?

时间:2010-10-14 12:33:08

标签: php string character-reference

如何获取也包含字符引用的字符串长度?我只想计算将在浏览器中显示的字符数。像

$raw = "Stack&#00f9"    =  Length = 6  
$raw = "Stack12345"  = Length = 10  
$raw = "Stack&#00f9&#00f9" = Length = 7  

提前致谢

5 个答案:

答案 0 :(得分:3)

我会选择:

$len = mb_strlen(html_entities_decode($myString, ENT_QUOTES, 'UTF-8'),'UTF-8');

虽然我首先会质疑为什么你的字符串中有HTML实体,而不是操纵实际的UTF-8编码字符串。

另外,请注意不要正确编写HTML实体(它们需要以分号结尾)。如果不添加分号,任何与实体相关的函数都将失败,并且许多浏览器将无法正确呈现您的实体。

答案 1 :(得分:2)

由于你的字符串包含unicode字符的文字编码(而不是UTF-8编码),你可以通过简单地用虚拟字符替换它们来获得长度,因此:

$length=strlen(preg_replace('/&#[0-9a-f]{4}/', '_', $raw));

如果 用PHP理解的东西(如UTF-8)进行编码,则可以使用mb_strlen() intead。

答案 2 :(得分:1)

strlen是一个单字节字符串函数,它在多字节字符串上失败,因为它只返回字节数而不是字符数(因为在单字节字符串中,每个字节代表一个字符)。

对于多字节字符串,请使用strlen的多字节对应mb_strlen,而不要忘记指定正确的字符编码。

要将HTML字符引用解释为单个字符,请使用html_entity_decode将它们替换为它们所代表的字符:

$str = html_entity_decode('Stackù', ENT_QUOTES, 'UTF-8');
var_dump(mb_strlen($str, 'UTF-8'));  // int(6)

请注意,&#00f9不是有效的字符引用,因为它在{16}之后缺少xX十六进制表示法,而&#之后缺少;十六进制值。

答案 3 :(得分:-1)

查看mb_strlen

答案 4 :(得分:-1)

mb_strlen('string' , 'UTF-8');