2010-01-26 12 views
22
<tag> 
Алекс М 
</tag> 

Kiedy próbuję uzyskać zawartość poniższego kodu przy użyciu funkcji domDocument, zwraca coś takiego:PHP z DOMDocument

ÐÐ»ÐµÐºÑ Ðœ 

Próbowałem ustawienie DOMDocument kodowanie do różnych 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 zawinięciem. Kiedy wyprowadzam treść strony do mojej przeglądarki, znaki są wyświetlane poprawnie (więc wątpię, że dane wejściowe są problemem).

+0

Czy możesz opublikować kod, którego używasz do tworzenia dokumentu i ważne treści do niego? –

Odpowiedz

42

Spróbuj:

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

Miałem ten problem z prostym znakiem £ i ta odpowiedź prawdopodobnie go rozwiązała. Należy zauważyć, że jeśli użyjesz html-podmiotów w łańcuchu, to nie będziesz w stanie zrobić loadXML, ponieważ XML będzie narzekał na nieznane jednostki; będziesz musiał użyć loadHTML. Jednak podejrzewam, że istnieje funkcja, która przekształci je w podmioty takie jak « lub cokolwiek innego. Problem polega na tym, że nie jest to dobra odpowiedź, ponieważ powoduje, że tekst jest nieczytelny, ale PHP jest nieco znane z problemów z kodowaniem. – Altreus

+1

Ta odpowiedź właśnie uratowała mi dzień, dziękuję. – Maerlyn

+0

Chciałbym zauważyć, że można dodać tę linię na końcu, gdy otrzymamy wynikowy kod HTML: '$ html = mb_convert_encoding ($ html, 'utf-8', 'znaczniki html');' Który konwertuje niektóre encje html powracają do swoich pierwotnych wartości. –

6

Dodaj nagłówek xml wam etykietkami - spróbuj tego:

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

miałem podobny problem po użyciu XPath do analizowania domDocument, a 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); 
+2

Dziękujemy za opublikowanie tego. Utrzymuję starszy serwer z PHP 5.2.6 i mam dokładnie ten problem. To rozwiązało to. –

Powiązane problemy