在什么情况下,诸如“ÄÖÜß”之类的特殊字符会被编码为实体,然后被解码为“ƒ÷<S”?

时间:2018-05-17 19:04:13

标签: php decode encode html-entities

我很难过为什么会这样。 如果我输入诸如“ÄÖÜß”之类的文本(它会被存储到数据库中),然后转换为html实体,当我运行时

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

这会将html实体“ÄÖÜß”转换为“ƒ÷

1 个答案:

答案 0 :(得分:2)

您遇到了文字编码问题。最可能的可能是您的文本被解释为Mac OS Roman - ÄÖÜß编码为ISO8859-1 C4 D6 DC DF;在解码为Mac OS Roman之后,它出现为ƒ÷‹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"]
);