如何获取也包含字符引用的字符串长度?我只想计算将在浏览器中显示的字符数。像
$raw = "Stack�f9" = Length = 6
$raw = "Stack12345" = Length = 10
$raw = "Stack�f9�f9" = Length = 7
提前致谢
答案 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)
请注意,�f9
不是有效的字符引用,因为它在{16}之后缺少x
或X
十六进制表示法,而&#
之后缺少;
十六进制值。
答案 3 :(得分:-1)
答案 4 :(得分:-1)
mb_strlen('string' , 'UTF-8');