Der folgende Beitrag wurde am 04. 12. 2009, 13:22 Uhr von Sesquialtera veröffentlicht.
Hallo,
ich habe folgendes hartnäckige Problem:
aus einem HTML file "content.html" soll der Inhalt (innerHTML) eines Tags ausgelesen werden. Das ganze soll im PHP-File "main.php" vor sich gehen. Ich habe dazu die DOMDocument Class (libxml2) verwendet.
Im 'main.php' wird als das html File eufgerufen und der Dokumentbaum an libxml2 übergheben:
$dom->loadHTMLFile("content.html");
Ich greife auf das gewünschte DOMElement zu und lese rekursiv alle Subelements in des neue $tmp_dom = new DOMDocument('1.0','utf-8'); ein.
Bei der Ausgabe in 'main.php' per echo $tmp_dom->saveHTML(); werden alle Umlaute in der falschen Kodierung ausgelesen und nicht richtig dargestellt.
Beide files sind als utf-8 kodiert, in der 'main.php' ist dies auch dekalariert (<meta http-equiv="content-type" content="text/html;charset=utf-8">.
Wenn ich 'content.html' mit iconv in 'latin-1' verwandle, stimmt der Output von echo $tmp_dom->saveHTML();!
Versteht DOMDocument::loadHTML/saveHTML kein UTF-8? Ich möchte nicht auf latin-1 umsteigen müssen, da ich seit langem alle Apps auf UTF-8 konvertiert habe.
Weiß jemand Abhilfe?
Vielen Dank fürs Posten!!
Franz
Der folgende Beitrag wurde am 04. 12. 2009, 13:46 Uhr von jobo veröffentlicht.
Hallo,
> Bei der Ausgabe in 'main.php' per echo $tmp_dom->saveHTML(); werden alle Umlaute in der falschen Kodierung ausgelesen und nicht richtig dargestellt.
Naja, "ausgelesen"? "Ausgegeben" oder? Du meinst, DOM gibt latin aus, obwohl du es mit utf-8 initialisiert hast? Glaub ich nicht wirklich.
Gruß
jobo
Der folgende Beitrag wurde am 04. 12. 2009, 13:52 Uhr von sesquialtera veröffentlicht.
> Hallo,
>
> > Bei der Ausgabe in 'main.php' per echo $tmp_dom->saveHTML(); werden alle Umlaute in der falschen Kodierung ausgelesen und nicht richtig dargestellt.
>
> Naja, "ausgelesen"? "Ausgegeben" oder? Du meinst, DOM gibt latin aus, obwohl du es mit utf-8 initialisiert hast? Glaub ich nicht wirklich.
>
> Gruß
>
> jobo
Hm, probier bitte mal den Test:
$txt = "<div>wäüÜoß</div>";
$dom2->loadHTML($txt);
echo $dom2->saveHTML();
Wenn das PHP-File mit diesem Code utf-8 kodiert (:filencoding=utf8) ist, ergibt das echo Müll, wenn du es latin-1 (:filencoding=latin1) kodierst, kommen korrekte deutsche Sonderzeichen !
Gruß, Franz
Der folgende Beitrag wurde am 04. 12. 2009, 13:53 Uhr von ChrisB veröffentlicht.
Hi,
> Bei der Ausgabe in 'main.php' per echo $tmp_dom->saveHTML(); werden alle Umlaute in der falschen Kodierung ausgelesen und nicht richtig dargestellt.
Hast du probiert, die verwendete Kodierung beim Erstellen der DOMDocument-Instanz mal explizit zu setzen?
MfG ChrisB
--
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
Der folgende Beitrag wurde am 04. 12. 2009, 13:58 Uhr von sesquialtera veröffentlicht.
> Hi,
>
> > Bei der Ausgabe in 'main.php' per echo $tmp_dom->saveHTML(); werden alle Umlaute in der falschen Kodierung ausgelesen und nicht richtig dargestellt.
>
> Hast du probiert, die verwendete Kodierung beim Erstellen der DOMDocument-Instanz mal explizit zu setzen?
>
> MfG ChrisB
>
$dom = new DOMDocument('1.0','utf-8');
$dom->loadHTMLFile("content.html");
hätte ich versucht.
Danke. Franz
Der folgende Beitrag wurde am 04. 12. 2009, 14:06 Uhr von ChrisB veröffentlicht.
Hi,
>
> $dom = new DOMDocument('1.0','utf-8');
> $dom->loadHTMLFile("content.html");
>
> hätte ich versucht.
Was ergibt die Kontrollausgabe von $dom->encoding nach dem Laden des HTML-Dokumentes?
MfG ChrisB
--
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
Der folgende Beitrag wurde am 04. 12. 2009, 14:13 Uhr von sesquialtera veröffentlicht.
> Hi,
>
> >
> > $dom = new DOMDocument('1.0','utf-8');
> > $dom->loadHTMLFile("content.html");
> >
> > hätte ich versucht.
>
> Was ergibt die Kontrollausgabe von $dom->encoding nach dem Laden des HTML-Dokumentes?
>
> MfG ChrisB
>
>
Danke. Diese Eigenschaften $dom->encoding, $dom->actualEncoding etc. waren alle "" solange im Quelldokument 'content.html' nicht die Mata info <meta http-equiv="content-type" content="text/html; charset=utf-8"/> stand.
Siehe auch mein [SOLVED] Kommentar.
Danke für eure Antworten und hzl. Gruß,
Franz
Der folgende Beitrag wurde am 04. 12. 2009, 14:08 Uhr von sesquialtera veröffentlicht.
>
> Beide files sind als utf-8 kodiert, in der 'main.php' ist dies auch dekalariert (<meta http-equiv="content-type" content="text/html;charset=utf-8">.
>
[SOLVED] im xhtml File 'content.html' hatte im header die Angabe<meta http-equiv="content-type" content="text/html; charset=utf-8"/> gefehlt (Oxygen schreibt das nicht per default hin).
Erst mit dieser Ergänzung liest und verarbeitet die DOMDocument Klasse das File als utf-8, sonst standardmäßig offenbar latin-1.
Danke fürs Mitdenken!
Hrzl. Grüße, Franz
© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4