Проблема PHP DOMDocument – русские буквы заменяются на мнемоники

Иногда DOMDocument глючит с русскими символами, происходит замена их на мнемоники. Происходит это при использовании методов loadHTML и saveHTML, кодировка файла UTF-8 без BOM, версия PHP 5.4.

$html = '<p>Текст на русском языке</p>';

$doc = new DOMDocument('1.0', 'UTF-8');
@$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

echo $doc->saveHTML();
PHP

Результат:

 <p>Ð¢ÐµÐºÑÑ ...</p>

Исправляет это добавление управляющих байтов UTF-8 (xEFxBBxBF) к началу переменной $html и функция html_entity_decode на выходе.

$html = '<p>Текст на русском языке</p>';

$doc = new DOMDocument('1.0', 'UTF-8');
@$doc->loadHTML("\xEF\xBB\xBF" . $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

echo html_entity_decode($doc->saveHTML());
PHP
<p>Текст на русском языке</p>
24.12.2016, обновлено 23.09.2019 1308

Поделится

Другие публикации

Для предотвращения XSS, SQL-инъекций и других атак, данные полученные из форм нужно чистить. Простое экранирования...
16.08.2019 201
В статье приведен пример формы и php-скрипта для безопасной загрузки файлов на сервер, возможные ошибки и рекомендации...
25.11.2017 11707
Отправка e-mail в кодировке UTF-8 с вложенными файлами и возможные проблемы.
17.11.2016 1877
С помощью расширения dompdf можно легко сформировать PDF файл. По сути, dompdf - это конвертер HTML в PDF который...
16.02.2018 9607