Sven Rautenberg: htmlentities und das € Zeichen

Beitrag lesen

Moin!

Ich nutze für eine Shoutbox htmlentities um alle gefährlichen html-Zeichen aus dem Text zu verbannen.

htmlspecialchars() wäre die richtige Lösung, dort werden alle "HTML-aktiven" Zeichen als Entity codiert (<, >, &).

htmlentities() codiert (unnötig) noch viel mehr Zeichen.

Dies funktionierte bis vor kurzem sehr gut, als ein Nutzer ein €-Zeichen eingeben wollte. Dies wurde als &#8364; dargestellt.
Im Quelltext hab ich festgestellt, dass htmlentities aus dem € Zeichen &amp;#8364 macht. Da nun das & umgewandelt wurde, wird das Euro Zeichen nicht mehr korrekt dargestellt. Ich habe verschiedene Zeichensatz Angaben in htmlentities ausprobiert, jedoch besteht mein Problem weiterhin. Hat jemand eine Lösung dafür ??

Dein Problem liegt nicht in der Verwendung von htmlentities() (oder besser htmlspecialchars()), sondern im Zeichensatz seiner Seite.

Ich gehe jede Wette ein, du verwendest ISO-8859-1. Damit ist die Darstellung des Eurozeichens nicht möglich - es ist dort schlicht nicht definiert.

Das bedeutet: Dein Shoutbox-Formular erlaubt zwar die Tasteneingabe für das Eurozeichen - der Browser kann es aber in ISO-8859-1 nicht verschicken.

Manche Browser ersetzen uncodierbare Zeichen durch Fragezeichen. Andere Browser ersetzen uncodierbare Zeichen durch die numerische Zeichenreferenz (beim Eurozeichen eben "&#8364;") im Text. Noch andere Browser ändern den Zeichensatz so, dass das Eurozeichen doch codierbar ist (z.B. Windows-1252). Keiner dieser Mechanismen versetzt dich in die Lage, an die nicht codierbaren Zeichen zu gelangen.

Es gibt keine andere Möglichkeit, als dein Formular, und damit deine gesamte Seite, in einem Zeichensatz zu codieren, der die Darstellung sämtlicher eingebbaren Zeichen erlaubt, und das ist UTF-8 (sowie jede andere Codierung, die den gesamten Unicode-Zeichenbereich darstellen kann, wie z.B. auch UTF-16 etc., was aber für westeuropäische Seiten unnötig mehr Datenmenge bedeutet).

- Sven Rautenberg

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