В каком случае специальные символы, такие как «ÄÖÜß», будут закодированы в сущности, а затем декодированы в «ƒ ÷‹ S »? - PullRequest
0 голосов
/ 17 мая 2018

Я озадачен тем, почему это произойдет.Если я ввожу такой текст, как «ÄÖÜß» (который сохраняется в БД как таковой), но затем преобразуется в html-сущности, при запуске

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

Это преобразует html-сущности «ÄÖÜß» в «ƒ÷ ‹S", а не "ÄÖÜß", который является желаемым выходом.

1 Ответ

0 голосов
/ 17 мая 2018

У вас проблема с кодировкой текста.Наиболее вероятно, что ваш текст интерпретируется как 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"]
);
...