Sönke Tesch: htmlentities(), htmlspecialchars() und Sonderzeichen

Beitrag lesen

ich verwende in meinem Forum (http://alex.ilosuna.org/forum/) die Funktion htmlentities(), um Code in Einträgen zu "entschärfen". Es gab bisher keine Probleme, bis jemand das Forum auf slowenisch verwenden wollte: die Sonderzeichen wurden falsch dargestellt.

htmlentities() kann nur richtig arbeiten, wenn es weiß, in welchem Format die Quelldaten vorliegen. Anders gesagt: Du mußt der Funktion schon sagen, welcher Zeichensatz im PHP-Skript (und den per htmlentities() auszugebenden Datendateien) verwendet wird, falls es sich nicht um iso-8859-1 handelt.

Hierzulande ist das meistens kein Problem, weil die PHP-Vorgabe iso-8859-1 mehr oder weniger Standard und obendrein mit vielen anderen Zeichensätzen (iso-8859-15 und windows-1252) weitestgehend kompatibel ist.

Problematisch wird es aber schon, wenn man im PHP-Quellcode beispielsweise iso-8859-15 nutzt und ein Eurozeichen eintippt - das wird von htmlentities() standardmäßig in das allgemeine Währungszeichen umgewandelt. Vollkommen korrekt wohlgemerkt, denn was in iso-8859-15 das Eurozeichen ist, ist in -1 das Währungszeichen.

Daß die ganze Geschichte völlig zusammenbricht, wenn statt iso-1 irgendwas komplett anderes verwendet wird, sollte bei genauerer Betrachtung klar sein.

Bitte lies die Anleitung zu htmlentities().

Nun gibt es ja auch htmlspecialchars(). Ist das nun besser dafür geeignet bzw. genauso sicher?

Gut möglich, vorausgesetzt ihr gebt den richtigen (d.h. slowenischen) Zeichensatz entweder im Kopf per <meta> oder in der Webserverkonfiguration an (bitte _nicht_ beides _gleichzeitig_!).

Gruß,
  soenk.e