Die Säulen der Zeichenkodierung

PHP Scripte und deren Ausgabe

PHP Scripte werden vom Webserver ausgeführt und dieser stellt den Inhalt dem Webbrowser zur Verfügung. Prinzipiell also ganz ähnlich wie beim HTML. Da der Inhalt jedoch in keiner kodierten Datei gespeichert ist, sondern erst zur Laufzeit generiert wird, muß ich dem Webserver mitteilen, wie der Output kodiert sein soll.
Im Apache lässt sich einstellen, wie PHP Dateien standardmäßig ausgegeben werden. Doch da mein Script auf allen Servern das gleiche Ergebnis erzielen soll, wähle ich einen anderen – besseren Weg: Ich lege die Ausgabekodierung in meinem Script fest.
Dazu definiere ich vor irgendeiner Art von Ausgabe den zu sendenden Header. Hiermit kann zum Beispiel bestimmen, ob der Outut eine JPEG Grafik, ein PDF oder eben eine HTML Datei ist. Zusätzlich gebe ich noch die gewünschte Kodierung an:

header('Content-Type: text/html; charset=utf-8');

Damit verhält sich der Output genauso wie die oben beschriebene HTML Datei. Ich kann jetzt beliebigen Text eingeben und er wird genau so im Browser dargestellt.

echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='de'>
<head>
<meta http-equiv='content-type' content='text/html; charset=utf-8' />";
 ...
 echo "El Niño (span. für „der Junge, das Kind“)";

Den oberen Teil des Codes übernimmt in den meisten Fällen ein Framework bzw. das verwendete CMS. Und genau hier ist Vorsicht geboten! Ich muß also wissen, wie meine Systemumgebung arbeitet. Verwendet mein CMS zum Beispiel UTF-8, dann muß meine Datei entsprechend kodiert sein.
Wie das geht, ist oben beschrieben.

Die zweite Säule steht! Beste Voraussetzungen für die Datenbankanbindung.

Datenbanken

Da die Datenbanken ein weiteres Glied in der Kette zur Bereitstellung von Inhalten sind, müssen auch diese zum Umfeld passen.
Der Artikel soll nicht beschreiben, wie ich eine Datenbank von einer Kodierung auf eine andere umstelle.

Wenn die Datenbank vom Framework bzw. dem CMS (WordPress, e107, Drupal usw.) bereitgestellt wird, ist von vornherein klar, das ich meine PHP Datei an die Datenbank anpassen muß! Das gilt besonders für verwendete Sprachdateien.

Baut man sich selbst ein System mit Datenbankanbindung zusammen, muß man beim Festlegen der Collation auf die richtige Einstellung achten.

Für den Betrieb von UTF-8 basierten Systemen ist die richtige Einstellung:
utf8_general_ci

Für den Betrieb von ISO-8859-1 basierten Systemen ist die richtige Einstellung:
latin1_general_ci

Mit diesen Einstellungen werden die Texte 1 zu 1 gespeichert. Der Text steht in der Datenbank genau so wie später auf der Webseite. Das Gleiche gilt für Formulareingaben, wenn ich diese in der Datenbank speichere. Die beiden Screenshots zeigen mein Beispiel mit phpMyAdmin:

db1

phpMyAdmin: Kollation

db2

phpMyAdmin: Bei richtigen Zusammenspiel aller Einstellungen wird der Text unverändert in der Datenbank gespeichert.

Zusammenfassung

Wenn alle drei Säulen aufeinander abgestimmt sind und der Zeichenkodierung in den Kopfdaten der Ausgabedatei entsprechen, sollte es keine Probleme beim Umgang mit Sonderzeichen und Umlauten geben.

Übrigens… auch chinesische Zeichen können so gehandhabt werden: 特殊字符

* Ich habe für alle Tests den Firefox benutzt. Einige Fehlerzeichen können in anderen Browsern unterschiedlich dargestellt werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Spam Schutz: Bitte löse die Aufgabe *Zeitlimit überschritten. Bitte vervollständigen Sie das Captcha noch einmal.