PHP-кодирование с помощью DOMDocument
<tag>
Алекс М
</tag>
Когда я пытаюсь получить содержимое следующего кода с помощью функций DOMDocument, он возвращает что-то вроде:
ÐÐ»ÐµÐºÑ Ðœ
Я попытался установить кодировку DOMDocument на разные значения (UTF-8, ISO-8859-1), используя mb_convert_encoding, iconv и utf8_encode, но безуспешно.
Как я могу получить "Алекс М" вместо "ÐÐ" ÐμÐºÑ Ðœ "?
EDIT: вход поступает со страницы, загруженной с помощью завитка. Когда я выводит содержимое страницы в свой браузер, символы отображаются правильно (поэтому я сомневаюсь, что вход является проблемой).
Ответы
Ответ 1
Try:
$string = file_get_contents('your-xml-file.xml');
$string = mb_convert_encoding($string, 'utf-8', mb_detect_encoding($string));
// if you have not escaped entities use
$string = mb_convert_encoding($string, 'html-entities', 'utf-8');
$doc = new DOMDocument();
$doc->loadXML($string);
Ответ 2
У меня была аналогичная проблема после использования XPath для анализа DomDocument и после прочтения этого
https://bugs.php.net/bug.php?id=32547
Я решил это так:
// Workaround because PHP 5.2.x has encoding problems, when we
// update to PHP 5.3 this line is not necesserry any more
$content = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' . $content;
// Creating new DOM document and loading HTML content
$dom_document = new DOMDocument('1.0', 'UTF-8');
$dom_document->substituteEntities = TRUE;
$dom_document->loadHTML($content);
Ответ 3
Добавьте заголовок xml в теги - попробуйте следующее:
$a = new DOMDocument ();
$a->loadXml ('<?xml version="1.0" encoding="UTF-8"?><tag>Алекс М</tag>');
print htmlspecialchars ($a->saveXml ());