Иногда 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();
Результат:
<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());
<p>Текст на русском языке</p>