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 ">".
- Also soll ein "ä" eben nicht in "ä", sondern in "&auml;" 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; &lt;Frau&gt; &amp; Kr&auml;mer
Mein Apache spuckt jedoch immer folgendes aus:
Hallo & <Frau> & Krämer
Es wird also nicht doppelt umgewandelt - woran könnte das liegen?
- 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; &lt;Frau&gt; &amp; Kr&auml;mer";
$encoded = strtr($str, array_flip($trans));
Jedoch ist das Ergebnis nicht wie gewünscht eine einfache Umwandlung:
Aus: "Hallo &amp; &lt;Frau&gt; &amp; Kr&auml;mer"
Sollte werden: "Hallo & <Frau> & Krämer"
Sondern eine doppelte Umwandlung:
Aus: "Hallo &amp; &lt;Frau&gt; &amp; Kr&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