Sven Rautenberg: htmlentities() oder htmlspecialchars() ?

Beitrag lesen

Moin!

Ich würde gerne wissen wollen, in welchen Fällen die Funktion htmlentities() oder htmlspecialchars() einzusetzen ist. Und, ob eines der beiden Funktionen sicherer ist, als das eine.

htmlspecialchars() ist immer dann angesagt, wenn das Encoding des Inputs auch dem Encoding des beabsichtigten Outputs entspricht.

htmlentities() ist in den seltenen Fällen angesagt, in denen das Encoding des Inputs nicht dem Encoding des Outputs entspricht und der Output in irgendetwas ANDEREM als UTF-8 erfolgen soll. Das erfordert dann aber zwingend, dass erstens das Encoding des Inputs bekannt ist und zweitens der Funktion auch mitgeteilt wird. Resultat sind dann numerische Zeichenreferenzen für alle Zeichen, die nicht in Standard-ASCII dargestellt werden können.

Unter dem Strich ist htmlspecialchars() also in 99,9% der Fälle die Funktion der Wahl.

Die Funktion htmlentities() unterstützt bsp. keine türk. Sonderzeichen, aber die Funktion htmlspecialchars() tut es. Kann hier problemlos die Funktion htmlspecialchars() eingesetzt werden?

Diese Aussage ist technisch nicht ganz korrekt. htmlspecialchars() kümmert sich ausschließlich um die Zeichen <, >, &, " und '. htmlentities() kümmert sich um weitaus mehr Zeichen, benötigt dazu aber die Angabe des Encodings. Da türkische Zeichen nicht im Default-Encoding ISO-8859-1 enthalten sind, werden diese logischerweise zerstört, da die identischen Bytewerte der türkischen Zeichen dort anderen Zeichen entsprechen und nach diesem abweichenden Schema in Entities gewandelt werden.

In der Liste unterstützter Zeichensätze finden sich Varianten für westeuropäische Sprachen, kyrillische Schriften, Chinesisch und Japanisch, sowie UTF-8 für sämtliche Schriftzeichen der Welt.

- Sven Rautenberg

--
"Love your nation - respect the others."