molily: € in ISO-8859-1er XML?

Beitrag lesen

Hallo,

meine XML-Parser-Klasse ähnlich wie hier

Die arbeitet genauso, wie ich es beschrieben habe, du bekommst immer UTF-8 heraus.

<?xml version="1.0" encoding="us-ascii" ?>  
<root>&#8364;</root>
$array_der_xml_daten = new XMLParser('test.xml');  
$str = $array_der_xml_daten->data[0]['content'];  
var_dump($str);  
ini_set('mbstring.internal_encoding', 'UTF-8');  
echo 'mb_strlen: ' . mb_strlen($str) . "\n";

Da ist alles völlig korrekt. Auf meiner UTF-8-Konsole sehe ich ein Euro-Zeichen. Damit das richtig dekodiert werden kann, muss der Browser natürlich wissen, dass es ein UTF-8-kodiertes Zeichen ist.

Wenn du jetzt ISO-8859-1 verwenden willst, kannst du diese UTF-8-Bytesequenz natürlich nicht einfach so in ein ISO-8859-1-kodiertes HTML-Dokument einbauen. In dem Fall würde ich dir raten, sie wieder durch den HTML-Entity &euro; zu ersetzen.

$str2 = str_replace("\xE2\x82\xAC", '&euro;', $str);  
var_dump($str2);

Alternativ: Schon in der XML-Datei HTML speichern, mit CDATA-Bereich oder Entity-Maskierung von <, > und &.

<root>&amp;#8364;</root>

Wenn du das dann ins HTML schreibst, ist es wieder &#8364; und es kommt das richtige Zeichen bei heraus.

Andererseits wäre eine Umstellung auf UTF-8 ratsam, weil XML immer mit UTF-8 einhergeht.

Mathias