PHP und MySQL mit UTF-8 – korrekte Ausgabe im Browser

02. Februar 2010  |  Kommentar schreiben   |  Tags: , , , ,



Bei Facebook teilen

Software Entwickler, die Seiten in verschiedenen Sprachen programmieren, haben oft das Problem, dass Sie mehrere Zeichensätze auf der gleichen Seitekombinieren müssen. Ein Beispiel dafür wären Umlaute und kyrillische Buchstaben. Wie man schon sieht werden diese Zeichen auf der jetzigen Seite problemlos dargestellt. Dafür tragen viele Faktoren bei, die ich gerne erwähnen möchte. Diese betreffen sowohl PHP+HTML, als auch MySQL Einstellungen.

Ich möchte den Artikel als eine kleine Checkliste erstellen, wo jeder schnell schauen kann ob alles ausprobiert wurde, bevor nach weiteren Problemquellen gesucht werden soll, falls UTF-8 nicht wie gewünscht angezeigt wird.

  1. Content-Type Einstellung im HTTP Response Header – nicht immer, allerdings fast immer werden HTTP Header zum Browser vom Besucher vor dem eigentlichen Inhalt gesendet. Das Feld sieht unter anderem so aus:Content-Type: text/html; charset=UTF-8

    Diese Einstellung kann auf verschiedene Art und Weisen gesetzt werden:
     - Mit PHP:
    <?php Header("Content-Type: text/html; charset=utf-8")?> (Dieser Aufruf darf nur dann ausgeführt werden, wenn noch keine Ausgabe im Browser stattgefunden hat.) - Mit einem .htaccess Eintrag
        AddDefaultCharset utf-8    (nur wenn Sie entsprechende Rechte haben die .htaccess Datei zu bearbeiten) - Sollte keinen Headereintrag vorliegen, greift der Browser auf die Meta Tags zurück, damit die richtige Kodierung ausgewählt werden kann. Diese können Sie so einsetzen:
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  2. MySQL Einstellungen - wichtig sind hier vor allem folgende Faktoren: - Kodierung der Daten, die zwischen dem Web-Server und dem MySQL Server laufen – diese muss auf UTF-8 eingesetzt werden. Dass vor jeder Transaktion als SQL Anfrage ausgeführt werden. Hierzu werden folgende Abfragen ausgeführt:
        SET NAMES 'utf8';
        SET CHARACTER SET 'utf8';Auch wenn alle Transaktionen auf UTF-8 laufen, müssen die Daten, die Sie aus Ihren Datenbanken abrufen und abspeichern, in UTF-8 zur Verfügung stehen. Durch den obigen Befehlen stellen wir sicher, dass die Daten beispielsweise beim Abspeichern eines Formulars zum MySQL Server richtig geschickt werden, es muss noch gewährleistet werden, dass diese in UTF-8 kodierten Felder gespeichert werden. 
     - Die Datenbank mit einer utf8-unicode-ci Kollation abspeichern
     - Alle Tabellen der Datenbank mit einer utf8-unicode-ci Kollation abspeichern
     - Alle Felder von allen Tabellen in der Datenbank mit einer utf8-unicode-ci Kollation abspeichern (nur diese, die Zeichen enthalten, z.B. CHAR, TEXT, VARCHAR etc.).Wenn Sie Daten aus einem MySQL Dump importieren, müssen diese bereits im Vorfeld in uf8-unicode-ci gespeichert worden sein.  

Wenn Sie sämtliche erwähnten Schritte ausführen, sollten Sie problemlose UTF-8 Kodierung auf Ihrer Seite haben. Das ist Heuzutage einfach besser und sicherer für die Daten, die Sie eventuell veröffentlichen möchten. Wir haben diese Erfahrung insbesondere bei unserer Schul-Community gemacht, wo jeder das eine oder andere Zeichen versucht einzugeben. Eine Programmierung mit UTF-8 ist sauber und universeller.

Teilen

Hinterlasse eine Antwort

Du musst angemeldet sein, um einen Kommentar abzugeben.