如何获取还包含字符引用的字符串的长度?我只想计算将在浏览器中显示的字符数。像
$raw = "Stack�f9" = Length = 6
$raw = "Stack12345" = Length = 10
$raw = "Stack�f9�f9" = Length = 7
提前致谢
如何获取还包含字符引用的字符串的长度?我只想计算将在浏览器中显示的字符数。像
$raw = "Stack�f9" = Length = 6
$raw = "Stack12345" = Length = 10
$raw = "Stack�f9�f9" = Length = 7
提前致谢
我会去:
$len = mb_strlen(html_entities_decode($myString, ENT_QUOTES, 'UTF-8'),'UTF-8');
尽管我首先会质疑为什么您的字符串中有 HTML 实体,而不是操作实际的 UTF-8 编码字符串。
此外,请注意您的 HTML 实体没有正确编写(它们需要以分号结尾)。如果您不添加分号,任何与实体相关的功能都会失败,并且许多浏览器将无法正确呈现您的实体。
由于您的字符串包含 unicode 字符的文字编码(而不是例如 UTF-8 编码),您可以通过简单地用虚拟字符替换它们来获得长度,因此:
$length=strlen(preg_replace('/&#[0-9a-f]{4}/', '_', $raw));
如果它们是用 PHP 理解的东西编码的,比如 UTF-8,你可以使用mb_strlen()
intead。
strlen
是一个单字节字符串函数,它在多字节字符串上失败,因为它只返回字节数而不是字符数(因为在单字节字符串中每个字节代表一个字符)。
对于多字节字符串,请改用strlen
's 多字节字符串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
不是有效的字符引用,因为它在十六进制表示法中缺少 ax
或X
之后,在十六进制值之后缺少 a。&#
;
mb_strlen('string' , 'UTF-8');