Leeloo5E: DOMDocument mag Sonderzeichen nicht

Beitrag lesen

Hallo,

Ich bastele mir grad in PHP ein XML-Dokument. Das klappt recht gut, bis auf eine Sache: Sonderzeichen verhindern die Darstellung des XML-Dokuments. Da hab ich mir gedacht, ich nehme htmlentities() und maskiere die Inhalte halt so. Aus ß wird so halt ß.
Das XML-Dokument wird damit korrekt erstellt. Im nächsten Schritt wird mit XSL ein HTML-Dokument erstellt und dieses verschluckt das ß bzw. ß ist nicht mehr da. "Sofortmaßnahmen" wird also zu "Sofortmanahmen".

Nun werdet ihr sagen: "Du brauchst eine Encodierung". Die Sache ist, ich hab die ja angegeben beim Erstellen des neuen XML-Dokuments mit DOM.

Ich gehe wie folgt vor:

  
// Creates an instance of the DOMImplementation class  
$imp = new DOMImplementation;  
  
// Creates a DOMDocumentType instance  
$dtd = $imp->createDocumentType('article', '', 'sdocbook.dtd');  
  
// Creates a DOMDocument instance  
$dom = $imp->createDocument("", "", $dtd);  
  
// Set encoding  
$dom->encoding = 'iso-8859-1';  
  
// Create an the root element  
$article = $dom->createElement('article');  
// Set an Attribute for root element  
$article->setAttribute('lang', 'de');  
// Append the root element  
$dom->appendChild($article);  
// Create Title Element  
$title = $dom->createElement('title', 'Sofortmaßnahmen');  
$article->appendChild($title);  
// Create SubTitle Element  
$subtitle = $dom->createElement('subtitle', 'Untertitel');  
$article->$dom->appendChild($subtitle);  
  
//Output created XML  
echo $dom->saveXML();  

Ja, und die Ausgabe sollte so aussehen, wegen dem "ß" in Sofortmaßnahmen meckert DOM jedoch rum und macht ab dem Zeichen nicht mehr weiter.

  
<?xml version="1.0" encoding="iso-8859-1"?>  
<!DOCTYPE article SYSTEM "sdocbook.dtd">  
<article lang="de">  
 <title>Sofortmaßnahmen</title>  
 <subtitle>Untertitel</subtitle>  
</article>  

In der DTD sind alle Sonderzeichen als Entities angegeben, so dass sie eigentlich akzeptiert werden sollten.
Das XSL zur Weitervearbeitung und Anzeige des XML als HTML ist ebenso in iso-8859-1. Stellt aber diese htmlentities-Darstellung der Sonderzeichen nicht da. Warum? Wieso werden die übergangen?

Als Zwischenschritt mach ich nun folgendes:

  
    $myxml = $dom->saveXML();  
    $myxml = html_entity_decode($myxml);  
  
    $xml = new DOMDocument();  
    $xml->resolveExternals = true;  
    $xml->loadXML($myxml);  
    echo $xml->saveXML();  

Damit werden die dekodierten HTMLEntities wieder in gewöhnliche Sonderzeichen umgewandelt und im Browser nach erfolgter XSL-Transformation korrekt angezeigt.

Gruß,
Leeloo

--
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra