Skip to main content

kurz notiert: PHP-Fusion & MySQL & Encoding

Jemand benutzt auf dem Server PHP-Fusion für eine Webseite. Nach unerfindlichen Gründen (eventuell lag es am PHP Update) wurden die Umlaute in den alten Beiträgen auf einmal falsch angezeigt. Neue Einträge wurden aber richtig erstellt und angezeigt. Anscheinend existierten nun in der MySQL Datenbank Einträge mit UTF-8 und Einträge mit Latin Encoding. Problem war eigentlich, dass im MySQL Server und auch in der Datenbank beziehungsweise in den Tabellen UTF-8 eingestellt war. Ein “grep” über die PHP-Dateien brachte auch keine falschen Encoding Einstellungen.

Als erster Versuch wurden alle Einträge konvertiert beziehungsweise vielmehr die Latin Umlaute ersetzt. Dafür habe ich bei GitHubGist ein fertiges PHP Script gefunden. Nach der Ersetzung wurden die alten Einträge immer noch falsch angezeigt. Das Löschen des Caches half nicht. Dafür waren nun auch die neuen Einträge falsch. Anscheinend waren die neuen Einträge vorher nicht UTF-8.

Der nächste Versuch war in PHP-Fusion direkt nach dem Verbinden den Charset auf UTF-8 mithilfe von mysql_set_charset einzustellen. Dies brachte auch den Erfolg. Anscheinend war als Standard nicht automatisch UTF-8 gesetzt. Eigentlich Komisch, da folgende Einträge für [client], [mysql], [mysqld] und weitere bereits in der my.cnf gesetzt waren:

character-sets-dir = /usr/share/mysql/charsets
default-character-set = utf8

Nach ein bisschen Suchen fand ich dann folgende Zeile, welche ich unter [mysqld] einfügte:

init-connect = 'SET NAMES utf8'

Nun funktionierten die Umlaute auch ohne die Änderung in PHP-Fusion. Wieso dies hier extra gesetzt werden musste, weiß ich nicht. Also was es macht, weiß ich. Aber wieso es nicht standardmäßig so eingestellt wird, ist für mich komisch. Dafür funktioniert es nun.