Rolf B: html/php utf-8 header wird ignoriert

Beitrag lesen

Hallo Lars,

Andreas schreibt:

Ist die PHP-Datei tatsächlich UTF-8-codiert?

Das ist etwas, das Du in deinem Editor tun musst. Da gibt es entweder irgendwo eine Einstellung zum Encoding, die Du pro Datei oder für ein Projekt setzt, oder Du hast im Speichern-Dialog eine Auswahlmöglichkeit. Das ist von Editor zu Editor sehr unterschiedlich.

Wichtig: Du musst zwei mal kontrollieren, ob dir beim Umcodieren die Umlaute nicht kaputt gehen. Mit ist mit verschiedenen Editoren schon beides passiert.

  1. Nach dem Ändern des Encodings (falls es dafür eine eigene Funktion gibt)
  2. Nach dem Speichern im neuen Encoding. Schließe die Datei, lade sie neu und prüfe die Umlaute.

Wenn Du dann mit deinem Projekt weitermachst und die Strings, die Du an den Client schickst oder vom Client bekommst, mit den String-Funktionen von PHP bearbeiten willst, dann denk dran, dass die "klassischen" Stringfunktionen nicht auf Multibyte-Zeichensätze wie UTF-8 ausgelegt sind. UTF-8 codiert alle Zeichen mit einem Code > 127 in 2 oder mehr Bytes, und die klassischen PHP Stringfunktionen operieren mit Bytes, nicht mit den variabel langen Bytegruppen, die ein Zeichen bilden. Statt dessen musst Du mit den mb...Funktionen arbeiten.

Das muss dann auch beim Speichern in die Datenbank beachtet werden. Die Datenbank speichert Text normalerweise in ihrem eigenen Encoding, und wenn dein Programm UTF-8 Strings anlieferst, muss der Datenbanktreiber wissen, dass Du das tust. Dafür hat mysqli zum Beispiel die Methode set_charset. Bei Einsatz von Unicode im PHP Programm ist es dann auch ganz hilfreich, das Encoding der DB auf Unicode zu stellen, MySQL bietet dafür Möglichkeiten.

Rolf

--
sumpsi - posui - clusi