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>€</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 € zu ersetzen.
$str2 = str_replace("\xE2\x82\xAC", '€', $str);
var_dump($str2);
Alternativ: Schon in der XML-Datei HTML speichern, mit CDATA-Bereich oder Entity-Maskierung von <, > und &.
<root>&#8364;</root>
Wenn du das dann ins HTML schreibst, ist es wieder € 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