Hallo,
Da die Datei in ISO-8829-1 kodiert ist (default von PHP5 und für mich so in Ordnung)
Das hat nichts mit PHP zu tun. Der XML-Parser arbeitet nach XML-Regeln. Default ist da UTF-8.
Selstsamerweise wird beim Parsen der XML-Datei die Entität nicht korrekt aufgelöst und ich erhalte kein Euro-Zeichen (getestet mit ord()).
Natürlich nicht. Falls du das DOM-Modul von PHP verwendest: Aus dem DOM bekommst du einen UTF-8-kodierten String, aber ord() arbeitet BYTEweise, nicht ZEICHENweise, also auf einer ganz anderen Ebene.
<?php
$doc = new DOMDocument();
$doc->loadXML('<root>€</root>');
$str = $doc->documentElement->firstChild->nodeValue;
var_dump($str);
echo strlen($str) . "\n";
ini_set('mbstring.internal_encoding', 'UTF-8');
echo mb_strlen($str) . "\n";
?>
Das funktioniert doch prächtig, wenn man den String als UTF-8-String behandelt.
Welche anderen Möglichkeiten seht ihr, um mein Euro-Zeichen in ISO-8859-1 abzuspeichern?
Du machst das schon völlig richtig. Und höchstwahrscheinlich arbeitet auch der eingesetzte XML-Parser völlig korrekt und löst die numerische Zeichenreferenz korrekt auf. Der Fehler muss woanders liegen (offenbar ein Denkfehler ;)).
Mit ist bewusst, dass ISO-8859-15 das könnte, jedoch ist mir nicht klar, wie ich meine XML-Datei auf dem Server in diesem Format speichern kann.
Mit einem Editor öffnen & speichern, der UTF-8 versteht?? (Jeder gute Editor tut das.)
Warum eigentlich nicht UTF-8? Ich arbeite viel unter Windows und in den Experimentierstadien muss jede text/???-Datei (also HTML, XML, PHP etc.) unter Windows bearbeitbar sein und ohne Störungen per FTP übertragbar sein.
Äh?? Windows ist ein Betriebssystem. Was hat Windows damit zu tun? Und was FTP??
Mathias