0

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

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

提前致谢

4

5 回答 5

3

我会去:

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

尽管我首先会质疑为什么您的字符串中有 HTML 实体,而不是操作实际的 UTF-8 编码字符串。

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

于 2010-10-14T12:44:19.303 回答
2

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

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

如果它们用 PHP 理解的东西编码的,比如 UTF-8,你可以使用mb_strlen()intead。

于 2010-10-14T12:39:45.247 回答
1

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)

请注意,这&#00f9不是有效的字符引用,因为它在十六进制表示法中缺少 axX之后,在十六进制值之后缺少 a。&#;

于 2010-10-14T12:39:58.547 回答
-1

看看mb_strlen

于 2010-10-14T12:34:30.390 回答
-1
mb_strlen('string' , 'UTF-8');
于 2010-10-14T12:36:13.770 回答