在什么情况下,“ÄÖÜß”等特殊字符会被编码为实体,然后解码为“ƒ÷‹S”?

In what case would special characters such as "ÄÖÜß" be encoded into entities and then decoded into "ƒ÷‹S"?

我很困惑为什么会发生这种情况。 如果我输入诸如“ÄÖÜß”之类的文本(它被存储到数据库中)但随后被转换为 html 实体,当我 运行

$html['address_array'] = array_map("html_entity_decode", $html['address_array']);

这会将 html 个实体“ÄÖÜß”转换为“ƒ÷‹S”,而不是所需输出的“ÄÖÜß”。

您遇到了文本编码问题。最有可能的可能性是您的文本被解释为 Mac OS 罗马语——ÄÖÜß 编码为 ISO8859-1 是 C4 D6 DC DF;解码为 Mac OS 罗马字后,结果为 ƒ÷‹fl。最后一个字符与您的样本不同,但非常接近,我怀疑它是匹配的。

将编码传递给 html_entity_decode——最好是 UTF-8——并确保您的网页使用的是适当的字符集。由于您使用的是 array_map,因此传递编码有点尴尬;如果您使用的是 PHP 的现代版本,我建议:

$html["address_array"] = array_map(
    function($x) {
        return html_entity_decode($x, ENT_COMPAT, "UTF-8");
    },
    $html["address_array"]
);