Gabriel: Entityumwandlungen

Beitrag lesen

Hallo,

ich möchte HTML-Code zuerst in einer XML zwischenspeichern und später dann wieder auslesen und als HTML-Code ausgeben.
Das problem bei der Sache ist, dass ich nicht einfach alle ISO-8859-1-Sonderzeichen zum speichern in ihre Entities konvertieren kann. Denn der XML-Parser meckert zurecht, wenn er Sachen wie "ä" vorfindet, da das nicht XML-konform ist. XML kennt ja nur die Eintities """, "&", "'", "<" und ">".

  1. Also soll ein "ä" eben nicht in "ä", sondern in "ä" umgewandelt werden. Das sollte per get_html_translation_table gehen. Das Beispiel auf php.net lautet:
$trans = get_html_translation_table(HTML_ENTITIES);  
$str = "Hallo & <Frau> & Krämer";  
$encoded = strtr($str, $trans);

Das Ergebnis sollte laut php.net folgendes sein:
Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;auml;mer

Mein Apache spuckt jedoch immer folgendes aus:
Hallo &amp; &lt;Frau&gt; &amp; Kr&auml;mer

Es wird also nicht doppelt umgewandelt - woran könnte das liegen?

  1. Die Umwandlung lässt sich mit einer Sonderbehandlung für die fünf validen XML-Entities in den Griff bekommen. Aber bei der zurückwandlung habe ich genau das umgekehrte Problem.
$trans = get_html_translation_table(HTML_ENTITIES);  
$str = "Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;auml;mer";  
$encoded = strtr($str, array_flip($trans));

Jedoch ist das Ergebnis nicht wie gewünscht eine einfache Umwandlung:
Aus: "Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;auml;mer"
Sollte werden: "Hallo &amp; &lt;Frau&gt; &amp; Kr&auml;mer"

Sondern eine doppelte Umwandlung:
Aus: "Hallo &amp;amp; &amp;lt;Frau&amp;gt; &amp;amp; Kr&amp;auml;mer"
Wird: "Hallo & <Frau> & Krämer";

Eine Umwandlung mit str_replace statt strtr führt zum selben Ergebnis,
obwohl in php.net steht "strtr() [...] verändert bereits durchgeführte Ersetzungen *NICHT*. "

Wäre super, wenn mir da jemand weiterhelfen würde. Im voraus schon vielen Dank.

Gruß
Gabriel