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

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

Комментарии

, чтобы добавить комментарий.

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

Формирование файла sitemap.xml
Пример создания файла карты сайта (sitemap.xml) на PHP. Интеграция его на сайт и подключение его в robots.txt
24779
+4
Поиск похожих текстов в базе данных MySQL + PHP
Один из вариантов поиска похожих статей в базе данных основан на схождении слов в двух текстах.
7697
+6
Работа с массивами PHP – создание, наполнение, удаление
Основные примеры работы с массивами PHP. Создание, наполнение, извлечение удаление значений.
102756
+13
PHP класс для отправки E-mail
Отправка писем в кодировке UTF-8 и формате HTML, вложение файлов, дамп писем на сервере в файле eml.
16787
+6
Преобразование цветов в PHP
Несколько примеров как перевести цвета из HEX в RGB и обратно с помощью PHP.
16368
-1
Работа с FTP в PHP
Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.
19325
+2