1

这个问题告诉我

htmlentities 在所有方面都与 htmlspecialchars() 相同,除了 htmlentities(),所有具有 HTML 字符实体等价物的字符都被翻译成这些实体。

听起来 htmlentities 是我想要的。

然后这个问题告诉我我需要“UTF-8”参数来摆脱这个错误:

Invalid multibyte sequence in argument

所以,这是我的编码包装函数(标准化不同 PHP 版本的行为)

function html_entities ($s)
{
    return htmlentities ($s, ENT_COMPAT /* ENT_HTML401 */, "UTF-8");
}

我仍然收到“参数中的多字节序列”错误。

这是一个触发错误的示例字符串,它是十六进制编码:

Jigue à Baptiste

4a 69 67 75 65 20 e0 20 - 42 61 70 74 69 73 74 65

我注意到 à 被编码为 0xe0,但编码为高于 0x80的单个字节。

我究竟做错了什么?

4

2 回答 2

2

Your string is encoded in ISO-8859-1, not UTF-8. Plain and simple.

function html_entities ($s)
{
    return htmlentities ($s, ENT_COMPAT /* ENT_HTML401 */, "ISO-8859-1");
                                                           ^^^^^^^^^^^^
}
于 2012-06-28T08:54:17.467 回答
1

If à is encoded as 0xE0 then you didn't save the file in UTF-8 encoding. 0xE0 is invalid UTF-8. It should be 0xC3 0xA0

Save your file in UTF-8 encoding. Also see UTF-8 all the way through

If you saved it correctly in utf-8, the hex should look like so:

4A 69 67 75 65 20 C3 A0 20 42 61 70 64 69 73 74 65
J  i  g  u  e     à        B  a  p  t  i  s  t  e
于 2012-06-28T08:55:54.780 回答