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

Wenn ich versuche, den Inhalt der folgenden Code-Funktionen mit DOMDocument zu bekommen, gibt es so etwas wie:PHP-Codierung mit DOMDocument

ÐÐ»ÐµÐºÑ Ðœ 

Ich habe versucht, DOMDocument Codierung auf verschiedene Werte (UTF-Einstellung 8, ISO-8859-1), mit mb_convert_encoding, iconv und utf8_encode, aber ohne Erfolg.

Wie kann ich "Алекс М" anstelle von "ÐÐ ° ÐμкÑ" "bekommen?

BEARBEITEN: Die Eingabe kommt von einer Seite, die mit curl geladen ist. Wenn ich den Seiteninhalt an meinen Browser ausgabe, werden die Zeichen korrekt angezeigt (daher bezweifle ich, dass die Eingabe das Problem ist).

+0

Können Sie den Code posten, den Sie verwenden, um das Dokument zu erstellen und den Inhalt wichtig zu machen? –

Antwort

42

Versuchen:

$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

Ich hatte dieses Problem mit einem einfachen £ -Zeichen und diese Antwort scheint es gelöst zu haben. Es sollte beachtet werden, dass Sie, wenn Sie html-entities in der Zeichenkette verwenden, nicht in der Lage sein werden, loadXML zu benutzen, da XML sich über unbekannte Entitäten beklagen wird; Sie müssen loadHTML verwenden. Ich vermute jedoch, dass es eine Funktion gibt, die sie in Entitäten wie « oder was auch immer konvertiert. Problem ist, das ist nicht wirklich eine gute Antwort, weil es den Text unlesbar macht, aber PHP ist ein wenig berüchtigt für die Codierung von Problemen. – Altreus

+1

Diese Antwort hat gerade meinen Tag gerettet, danke. – Maerlyn

+0

Ich möchte anmerken, dass Sie diese Zeile am Ende hinzufügen können, wenn Sie den resultierenden HTML erhalten: '$ html = mb_convert_encoding ($ html, 'utf-8', 'html-entities');' Welche konvertiert einige HTML-Entitäten zurück zu ihren ursprünglichen Werten. –

6

hinzufügen XML-Header Sie tags - versuchen Sie dies:

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

Ich hatte ein ähnliches Problem nach XPath DomDocument zu analysieren, und nach dem Lesen dieses

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

Ich löste es so

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

Vielen Dank für das Posten. Ich führe einen alten Server mit PHP 5.2.6 und habe genau dieses Problem. Das hat es gelöst. –