Я только что столкнулся с тем, что HTML-документ, закодированный с помощью UTF-8, становится некорректным после loadHTML()
,
В стеке много таких QnA:
Однако, как я понимаю, большинство ответов основаны на предположении, что исходная кодировка является UTF-8. Так что рекомендуется использовать mb_convert_encoding()
функционировать таким образом:
$dom->loadHTML(mb_convert_encoding($document_in_utf_8, 'HTML-ENTITIES', 'UTF-8'));
Я полагаю, что это будет работать только если исходный документ является в UTF-8. К сожалению, в моем мире исходный документ может иметь любую доступную кодировку: Windows-1251, UTF-8, KOI8-R и так далее …
Итак, какова лучшая практика для решения этой проблемы для любой кодировки?
ОБНОВЛЕНИЕ 1: Просто найди mb_detect_encoding()
функция. Это хорошая практика, чтобы использовать один для обнаружения кодировки? Таким образом:
$encoding = mb_detect_encoding($doc);
$doc = mb_convert_encoding($doc, 'HTML-ENTITIES', $encoding);
$dom->loadHTML($doc);
Протестировал это на нескольких документах: похоже, это работает, но могу ли я быть уверен, что это будет работать во всех разумных случаях?
Задача ещё не решена.
Других решений пока нет …