Da erstelle ich ein neues Projekt komplett im UTF-8 Format um endlich mal keine Sorgen mit Zeichencodierungen zu haben:
- Die Dateien selber sind im UTF-8 Format gespeichert
- Die Ausgabe im HTML wird als UTF-8 deklariert
- Die MySQL Datenbank und alle Tabelle haben utf8_general_ci als Kollation
und trotzdem kommt mir bei der ersten Abfrage das berüchtigte Fragezeichen entgegen:
Was ist passiert?
MySQL benutzt ohne Vorgaben den Lateinischen Zeichensatz zur Übermittlung von Ergebnissen. Ungeachtet des Formats, in dem die Daten gespeichert wurden. Also muss man der MySQL Datenbank irgendwie mitteilen, dass man doch bitte jegliche Kommunikation im UTF-8 Format zu führen hat.
Zend Framework INI
Tief verbuddelt in der Zend_DB Adapter Beschreibung des Zend Frameworks findet sich (ohne Beispiel) dann doch der Parameter ‚charset‘.
[php]
resources.db.params.charset = utf8
[/php]
Und schon gibt es kein hin und her codieren und decodieren von Daten mehr. Ein kompletter MySQL Config-Block sieht dann z.B. so aus:
[php]
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = USERNAME
resources.db.params.password = PASSWORT
resources.db.params.dbname = DATENBANKNAME
resources.db.params.charset = utf8
[/php]
Wer die Verbindungseinstellungen direkt in MySQL bearbeiten möchte, der möge hoffentlich mehr unter MySQL Charset Connection finden. Mir reicht erstmal der ZF Adapter ;-)
Gibt es andere Möglichkeiten? Wie wird das Problem in anderen Frameworks gelöst?
Fazit
Ich hoffe, ich kann mit diesem Quicktip anderen Programmierern ein paar graue Haare und festgewachsene Stirnrunzeln ersparen. Ihr werdet noch genug im Laufe der Zeit bekommen.
Sollte viel einfacher gehen. In CakePHP ist es der key ‚encoding‘, => ‚utf8‘ und die Sache hat sich :)
Völlig unabhängig vom Framework: Einfach „SET NAMES utf8“ an die Connection senden und schon spricht die UTF-8.
@Maggo: So etwas hatte ich eigentlich im ZF auch gedacht, darum war ich ja vom Ergebnis so verwundert :)
@Marcel: Danke für den Hinweis!