Probleme mit Umlauten und Sonderzeichen in mysql, PHP und HTML mit dem UTF-8 Zeichensatz in 6 Schritten vermeiden

Ich hatte früher immer das Problem mit den deutschen Umlauten in meinen Homepage Projekten.

Nun habe ich einen Weg gefunden, damit es keine Probleme mehr mit Sonderzeichen gibt:

1. UTF-8 Codierung aller Dateien

Alle Dateien müssen in dem Zeichensatz UTF-8 ohne BOM gespeichert sein.

2. UTF-8 Codierung im HTML Document

Im Dateikopf, direkt nach <HEAD> folgende Meta Angabe:

<meta charset="utf-8">

3. Datenbanken auf UTF-8 stellen

Beim Anlegen einer Datenbank die Kollation auf utf8_unicode_ci setzen. Bei bestehenden Tabellen können diese z.B. unter phpmyadmin auf diese Kollation umgestellt werden. Wenn Spalten von einem anderen Typ sind, müssen diese auch noch geändert werden, unter Struktur->Bearbeiten.

Wie Sie nachträglich automatisch alle Tabellen und Spalten auf Unicode umstellen, finden Sie hier: Alle MySQL Tabellen und Spalten auf UTF8 und InnoDB umstellen.

4. Datenbank Verbindung richtig setzen

Wenn über PHP eine Datenbankverbindung aufgebaut wird, muss danach die Verbindung auf UTF-8 gesetzt werden.

mySQLi:

$mysqli = new mysqli ( $host, $user, $pass, $database );
$mysqli->set_charset("utf8");
$mysqli->query ( "SET NAMES 'utf8'" );
$mysqli->query ( "SET CHARACTER SET 'utf8'" );

Das „set_charset“ ist sehr wichtig, denn nur dann kann „real_escape_string“ als Schutz vor SQL-Injections richtig funktionieren. Siehe http://php.net/manual/de/mysqli.real-escape-string.php

5. Über PHP den UTF-8 Header senden

if (!headers_sent()) {
    header('Content-type: text/html; charset=utf-8');
}

6. Ausnahmen

Laut Selfhtml.org gibt es allerdings Spezialfälle für Zeichen, die maskiert werden müssen. Das „Kleiner als <“ Zeichen mit dem Unicode &#60; maskieren, weil es sonst als Start-Tag gesehen wird und ein führendes „Ampersand &“ mit &#38; weil es sonst als Beginn für eine Zeichenreferenz gedeutet wird. Ein allein stehendes & muss nicht maskiert werden.

(7. Webserver Konfiguration)

Sollten die ganzen Schritte nichts helfen, dann kann es nur noch an der Konfiguration vom Webserver, an der PHP oder mySQL Installation liegen. Ein neu aufgesetzter aktueller Apache Webserver mit PHP und mySQL Datenbank dürfte keine Probleme machen. Eine gute Beschreibung, welche Einstellungen man überprüfen und ggf. setzen muss, findet sich hier: http://noqqe.de/blog/2011/02/24/charset-utf8-fur-apache-mysql-debian-und-wordpress/. Voraussetzung natürlich, Sie haben Zugriff auf die Konfigurationsdateien, was bei einem normalen Hosting einer kleinen Seite meist nicht der Fall ist. Evtl. kann man in der Administrationsoberfläche des Webseitenproviders Einstellungen vornehmen oder er gibt die Möglichkeit, die Zeichencodierung per .htaccess Dateien zu beeinflussen, siehe hier: http://www.w3.org/International/questions/qa-htaccess-charset.de.

Schreibe einen Kommentar

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

*
*
*