/ / Kodowanie PHP za pomocą DOMDocument - php, dom, kodowanie znaków

Kodowanie PHP za pomocą DOMDocument - php, dom, kodowanie znaków

<tag>
Алекс М
</tag>

Gdy próbuję uzyskać treść następującego kodu za pomocą funkcji DOMDocument, zwraca coś takiego:

ÐÐ»ÐµÐºÑ Ðœ

Próbowałem ustawić kodowanie DOMDocument na różne wartości (utf-8, ISO-8859-1), używając mb_convert_encoding, iconv i utf8_encode, ale bez powodzenia.

Jak mogę uzyskać „Алекс М” zamiast „Ðл ÐµÐºÑ Ðœ ”?

EDYCJA: Dane wejściowe pochodzą ze strony załadowanej zwijaniem. Kiedy wyprowadzam zawartość strony do mojej przeglądarki, znaki są wyświetlane poprawnie (więc wątpię, czy problem jest związany z wprowadzaniem danych).

Odpowiedzi:

42 dla odpowiedzi № 1

Próbować:

$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);

19 dla odpowiedzi nr 2

Miałem podobny problem po użyciu XPath do parsowania DomDocument i po przeczytaniu tego

https://bugs.php.net/bug.php?id=32547

Rozwiązałem to w ten sposób

// 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);

6 dla odpowiedzi nr 3

Dodaj nagłówek xml do swoich tagów - spróbuj tego:

$a = new DOMDocument ();
$a->loadXml ("<?xml version="1.0" encoding="utf-8"?><tag>Алекс М</tag>");
print htmlspecialchars ($a->saveXml ());