Axel Richter: XML PHP Entities Umlaute echo save

Beitrag lesen

Hallo,

<?xml version="1.0"?>
<wurzel>
&gt;Ü
</wurzel>

In dieser Methode wird das gespeicherte Objektmodell in ein gültiges XML umgewandelt.

Genau das versucht PHP hier wohl.

Das zuvor gespeicherte ">" ergibt nun korrekt zu "&gt;", das "Ü" wird in einer von vielen möglichen Formen als "&#xDC;" ausgeben.

Naja so viele andere Möglichkeiten bleiben ja nicht für XML Zeichendaten.

@frankx:
Dein XML hat keine Encoding Deklaration. Deshalb gilt:
Bei Abwesenheit von Informationen, die durch ein externes Transportprotokoll (z.B. HTTP oder MIME-Typ) geliefert werden, ist es ein Fehler, wenn ein Entity, welches eine Kodierungsdeklaration enthält, in einer anderen Kodierung an den XML-Prozessor übergeben wird. Ebenso ist es ein Fehler, wenn ein Entity, das weder mit einer Byte-Order-Markierung noch mit einer Kodierungsdeklaration beginnt, eine andere Kodierung als UTF-8 benutzt. Beachten Sie, dass wegen der Tatsache, dass ASCII eine Teilmenge von UTF-8 ist, ASCII-Entities nicht unbedingt eine Kodierungsdeklaration brauchen.

Dein "Ü" steht offensichtlich nicht im UTF-8 encoding im String, sondern im ISO-8859-x encoding. PHP würde also fehlerhaftes XML erzeugen, würde es das Byte xDC einfach so im Dokument stehen lassen.

Ein:

<?xml version="1.0" encoding="ISO-8859-1"?>
<wurzel>
 &gt;Ü
</wurzel>

wäre einen Versuch wert, eventuell verbunden mit einem
$doc=new DOMDocument('1.0', 'iso-8859-1');.

viele Grüße

Axel