Design für Print und Web

Hilfe! In PHP 5.4 verschluckt htmlentities Text!

24.01.2013 um 19:15 Uhr
Emersacker
abgelegt unter PHP

Emersacker. Seit dem Upgrade meines Webpaketes werden meine Seiten jetzt mit PHP 5.4 statt PHP 5.2 geparst … und was für ein Schock! Alle Texte in der Eingabemaske meines CMS sind verschwunden. Nach ein bisschen testen komme ich der Sache auf die Schliche. Die Funktion htmlentities() ist die Wurzel des Übels. Dann merke ich, in ein paar Sonderfällen gibt sie doch etwas zurück. Nämlich immer dann, wenn keine Umlaute im Text vorkommen.

Hilfe! In PHP 5.4 verschluckt htmlentities Text!

So ist der Fall klar, es liegt am Zeichensatz. Und tatsächlich, in PHP 5.4 wurde der Default-Zeichensatz für die Funktion htmlentities() von ISO-8859-1 auf utf-8 umgestellt.

Dummerweise hat das geänderte Verhalten zur Folge, dass die Funktionen htmlentities() und auch htmlspecialchars() allen Text, mit dem man sie füttert, verschlucken, und nichts mehr zurückgeben, sobald da ein kleines Umlautchen oder Akzentchen drin vorkommt. Schnelle Abhilfe in allen Fällen schafft dies:

htmlentities($string, ENT_COMPAT, 'iso.8859-1');

So wird der europäische Zeichensatz geladen und alles ist wieder gut …