PHP

Проблема 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();

Результат:

 <p>&ETH;&cent;&ETH;&micro;&ETH;&ordm;&Ntilde;&#129;&Ntilde; ...</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>
24 декабря 2016
В последнее время письма отправляемые с хостингов через функции mail() и mb_send_mail() часто попадают или совсем не...
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
В статье приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и...
Библиотека GD дает возможность работать с изображениями в PHP. Далее представлены примеры как изменить размер, вырезать...