Hi,
folgende Situation:
-
Ein XML (<?xml version="1.0" encoding="UTF-8"?>) enthält <description>... "You’ re Beautiful" ...</description>.
-
Dieses lese ich wie folgt aus:
$xml = simplexml_load_string(...);
$foo = $item->xpath('//description/text()')[0]; // Code leicht verkürzt -
Es enthält nunmehr den Text '... "You’ re Beautiful" ...', was (soweit ich es überblicke) korrekt UTF-8-dekodiert ist.
-
Dies gebe ich aus mit:
print htmlentities($foo, null, 'UTF-8'); -
Ergebnis: '... "You’ re Beautiful" ...'.
So weit, so gut. Da ich aber wieder XML ausgeben muss, ersetze ich alle HTML-Entities durch ihre nummerischen Gegenstücke, indem ich get_html_translation_table(HTML_ENTITIES) umkehre und in str_replace() jage. Nach meinem Dafürhalten sollte dies idiotensicher sein, da laut Doku eben dies von htmlentities() verwendet wird.
Lasse ich mir var_dump(get_html_translation_table(HTML_ENTITIES)) ausgeben, sehe ich aber nirgendwo "’", so dass dies auch nicht in meiner Funktion rückübersetzt wird. Dieses Problem konnte ich zwar mit dem zweiten User-Kommentar lösen; aber es bleibt ein ungutes Gefühl: Wenn htmlentities() plötzlich Entities aus der hohlen Hand zaubert, mit welchen muss ich dann rechnen?
Daher meine Fragen: Habe ich irgendwo einen Denk- oder sonstigen Fehler? Zeigt sich mal wieder mein mangelhaftes Wissen um die Zeichensätze? Kann ich codemäßig das Problem beheben, ohne Massen von Entities angeben zu müssen?
Cheatah
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes