Der Martin: XML PHP Entities Umlaute echo save

Beitrag lesen

Hallo Axel,

Hm, schau Dir nochmal das PHP-Script in https://forum.selfhtml.org/?t=130693&m=844996 an. Das ist _ein_ Script, welches _ein_ Dokument mit drei echo-Anweisungen an den Browser ausgibt.

in der ersten echo-Anweisung "muss" es korrekt wiedergegeben werden, egal ob das Dokument als UTF-8 oder ISO abgelegt ist. Hauptsache, der Server liefert es mit der richtigen Angabe zur Zeichencodierung aus.
Aber das zweite echo gibt etwas aus, das bereits von PHP verarbeitet wurde. Mir scheint es nach wie vor, dass der Eingabestring $xml, den loadXML() bekommt, schon ein UTF-8-codiertes Ü enthält, aber loadXML() geht davon aus, dass der String ISO-codiert ist und behandelt die beiden Bytes, die das Zeichen bilden, als einzelne Zeichen und konvertiert sie als zwei getrennte Sonderzeichen in UTF-8.
Dann greift frankx ja mit $doc->documentElement->nodeValue direkt auf die gespeicherten Strings zu und umgeht dabei eventuell eingebaute Rück-Codierungen, gibt also die zwei separaten Zeichen aus.
Beim Zugriff über saveXML() wird die Codierung wieder rückgängig gemacht: PHP "weiß", dass der String intern als UTF-8 gespeichert ist, aber an der Schnittstelle zum Script ISO ausgetauscht werden soll. Also werden die beiden separat in je zwei Bytes codierten Sonderzeichen wieder in ihr Äquivalent in ISO umgewandelt, der daraus entstehende String im HTML-Kontext als UTF-8 aufgefasst und nach zweimaliger falscher Umwandlung wieder richtig angezeigt.
Ist doch gar nicht so kompliziert ... ;-)

Ja und dann eben:
echo utf8_decode($doc->documentElement->nodeValue);
für alle XML-DOM-Funktionen, die offensichtlich UTF-8 zurückliefern.

Meiner Ansicht nach tun sie das eben nicht, sondern sie nehmen und geben genau das, was in new DOMDocument() definiert wurde.

Ciao,
 Martin

--
Husten kann böse Folgen haben.
Besonders im Kleiderschrank.