SimpleXML, Sonderzeichen

joschilein

Multitalent
ID: 9301
L
5 Mai 2006
1.393
151
Folgende XML Datei wird absolut fehlerfrei dargestellt:
Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<testlauf>
  <ball farbe="grün"/>
</testlauf>

Warum funktioniert die Generierung dieser Datei mit SimpleXML nicht?
PHP:
<?php
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="ISO-8859-1"?><testlauf></testlauf>');
$ball = $xml->addChild('ball');
$ball->addAttribute('farbe', 'grün');
$xml->asXML('test2.xml'); // oder auch ohne Dateiangabe
?>

Code:
Warning: SimpleXMLElement::asXML() [function.SimpleXMLElement-asXML]: output conversion failed due to conv error, bytes 0xFC 0x6E 0x22 0x2F in [..] on line [..]

Das "ü" ist doch eindeutig im Zeichensatz ISO-8859-1 enthalten!? Es wird ja auch kein Element damit bestückt, sondern nur der Wert eines Attributes.
 
Funktioniert es denn, wenn du es mit ü codierst ? *mal ins Blaue frag*
 
Natürlich "funktioniert" es dann, aber das Gedöns steht dann auch in der xml Datei bzw dem String und muss dann wieder umgewandelt werden. Warum gibt es denn Zeichensätze? Und wenn das ü direkt in die xml Datei eingetragen wird, wird sie dadurch ja auch nicht schlecht, man kann sie dafür ohne Probleme lesen.
 
SimpleXML nimmt nur UTF8 Codierte Strings an, also musst du vorher Strings mit Umlauten durch utf8_encode() jagen. Am einfachstens ists wenn du dir ne eigene Klasse von SimpleXML ableitest und die Schreibfunktionen überlädst. zb:

PHP:
class isoSimpleXML extends SimpleXMLElement {
   public function addAttribute($key,$value) {
      return parent:addAttribute(utf8_encode($key),utf8_encode($value));
   }
   
   public function addChild($key) {
      return parent:addChild(utf8_encode($key));
   }

   //usw...
}