在什么情况下,“ÄÖÜß”等特殊字符会被编码为实体,然后解码为“ƒ÷‹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"]
);
我很困惑为什么会发生这种情况。 如果我输入诸如“ÄÖÜß”之类的文本(它被存储到数据库中)但随后被转换为 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"]
);