pearl.de Bestseller NEU Beratungsvideo Schnäppchen Ausgezeichnet bewertet Pressestimmen Günstig beiwww.pearl.de onlne einkaufen
Internet Magazin


22. Juli 2009
Workshop gegen das Chaos: MySQL-Codierungsproblem beheben: Nie wieder Umlaut-Chaos Bild vergrößern 475 458 http://img1.magnus.de/Zeichen-Codierungsproblem-beheben-r475x458-C-4bface4a-7636830.jpg
Workshop gegen das Chaos

MySQL-Codierungsproblem beheben: Nie wieder Umlaut-Chaos

Falsch dargestellte Umlaute sind selbst auf großen Websites keine Seltenheit. Der Workshop zeigt, wie Sie solche Probleme vermeiden oder beheben können.

Welche theoretischen Probleme in der Datenbank oder im Header auftauchen können, haben wir bereits in einer der letzten Ausgaben besprochen. Dabei ging es schwerpunktmäßig um Codierungsprobleme in MySQL-Datebanken.

Es gibt aber noch eine Vielzahl anderer Schwierigkeiten. Damit Sie Umlautprobleme gezielt beseitigen können, müssen Sie zuerst die Fehlerquelle lokalisieren. Um zu erkennen, an welchen Stellen es zu Fehlern kommen kann, rufen Sie sich den technischen Ablauf eines Seitenaufrufs in Erinnerung – hier schematisch anhand des Beispiels einer Foren-Software auf Basis von PHP umrissen:

1. Der Browser eines Clients sendet bei einem Seitenaufruf die HTTP-Anfrage an den Web-Server. Dieser leitet die Anfrage aufgrund der Dateiendung .php an den PHP-Interpreter weiter. PHP führt den Code der Datei aus und bindet dabei oft zusätzliche Sprachdateien ein.

2. PHP baut eine Verbindung zum MySQL-Server auf, um Daten (Texte) aus der Datenbank auszulesen oder zu speichern. MySQL nimmt die Anfrage entgegen, sucht die angefragten Daten aus den entsprechenden Datenbanktabellen zusammen und liefert die Ergebnisdatensätze zurück an PHP.

3. PHP generiert anhand der eingebundenen Sprachdateien und den vom MySQL-Server gelieferten Daten die Ausgabe in Form einer HTML-Seite, die an den Web-Server übergeben wird.

4. Der Web-Server liefert diese an den Client aus. Der Browser des Clients nimmt die Webseite entgegen, interpretiert sie und stellt sie dar.

Diese Liste von Zusammenhängen ist natürlich nicht willkürlich. Hinter jedem Punkt verbergen sich mögliche Fehlerquellen, die hier erörtert werden sollen. Grundsätzlich ergeben sich vier unterschiedliche Bereiche, die als Ursache in Betracht kommen:

• in der Datenbank abgelegte Texte sind falsch codiert
• die Kommunikation zwischen PHP und MySQL ist nicht auf einen Zeichensatz geeicht
• in Dateien gespeicherte Texte (Sprachvariablen, Templates) sind falsch codiert
• der Header der Webseite ist falsch oder nicht vorhanden.

Kopfsache

Jede ausgelieferte HTML-Seite sollte im Header eine Angabe besitzen, in der die Zeichencodierung hinterlegt ist, die vom Web-Server geliefert wird. Der Browser orientiert sich daran und stellt die Zeichen gemäß dieser Angabe dar.

Verwechseln Sie diese Angabe nicht mit dem Meta-Tag http-equiv, welcher sich im Quelltext im HEAD-Bereich der Seite befindet. Der hier gemeinte Header wird vor dem Ausliefern des eigentlichen HTML-Codes gesendet.

Ist die Zeichensatzangabe enthalten, so wird der nachfolgende Meta-Tag ignoriert. Er hat dann bestenfalls noch informativen Charakter für Suchmaschinen, aber keine steuernde Funktion mehr. Nur wenn die Angabe im Header fehlt, orientiert sich der Browser mangels anderer Informationsquellen am Meta-Tag.

Bei der Anzeige ist es nicht möglich Zeichensätze innerhalb einer einzelnen Webseite zu mischen. Stößt der Browser auf ein Zeichen, welches nicht im angekündigten Zeichensatz enthalten ist, so stellt er es mit einem Fragezeichen oder einem Rechteck als Platzhalter dar.

Intern wird anhand des ASCII/ANSI-Codes eines Zeichens in der entsprechenden Codierungstabelle nachgesehen, welches konkrete Zeichen für diesen Wert angezeigt werden muss. Um den im Kopf tatsächlich übermittelten Zeichensatz zu erkennen, ist Ihnen das Browser-Plugin Live HTTP Header eine große Hilfe. Es zeigt Ihnen die sonst nicht sichtbaren Informationen des Headers im Klartext an; unter anderem auch den vorgegebenen Zeichensatz (Charset) im Bereich Content-Type, wenn er angegeben ist.

Zeichen-Codierungsproblem beheben
Bild vergrößern 594 638 http://img2.magnus.de/Zeichen-Codierungsproblem-beheben-r594x638-C-15b2a9b7-7636896.jpg Windows Notepad – durch Codierungsprobleme offenbar völlig überfordert.

Windows Notepad – durch Codierungsprobleme offenbar völlig überfordert.

Will man in einem mehrsprachigen Forum sowohl deutsche Umlaute (enthalten in Zeichensatz ISO 8859-1 oder latin1), als auch polnische Sonderzeichen (ISO 8859-2 oder latin2) anzeigen, so muss die Webseite in einer geeigneten Zeichencodierung ausgeliefert werden.

Da die Webseite nur einen Zeichensatz besitzen kann, eignet sich in diesem Fall keiner der beiden Zeichensätze, da sie sich gegenseitig ausschließen. Man benötigt also einen Zeichensatz, der sämtliche Sonderzeichen beider Sprachen enthält.

Hier bietet sich der Zeichensatz Unicode an, der mehr als 100.000 Zeichen aus über 600 verschiedenen Zeichensätzen in der Norm ISO 10646 vereint. Wird die Webseite in einem Unicode-Derivat – zum Beispiel im immer häufiger anzutreffenden UTF-8-Format – ausgeliefert, so lassen sich sowohl deutsche, als auch polnische Sonderzeichen problemlos anzeigen.

In welcher Codierung ein Browser die Daten interpretiert, können Sie leicht ermitteln. Unter Ansicht/Zeichenkodierung zeigt Ihnen Firefox an, welche Zeichencodierung er anwendet. In anderen Browsern gibt es die gleiche Funktionalität unter ähnlichen Menüpunkten.

Hier lässt sich bereits die erste und in der Praxis häufig auftauchende Fehlerquelle dingfest machen: Weicht nämlich die Meta-Tag-Angabe zum Zeichensatz von der im Header gesendeten ab, so ist die Wahrscheinlichkeit hoch, dass der Programmierer versäumt hat, eine entsprechende Angabe im Header zu platzieren oder sogar gar keinen Header sendet.

In vielen Foren herrscht noch die Meinung vor, dass es ausreiche, alleinig die Meta-Tag-Angabe im HTML-Teil zu setzen. Die meisten Web-Server erzeugen oder ergänzen den fehlenden Header in dem Fall jedoch um die fehlende Zeichensatzangabe mit einem Standardwert, der in der Konfiguration eines Apachen über die Direktive AddDefaultCharset gesetzt wird.



Inhaltsverzeichnis


Verwandte Themen

Günstig bei www.pearl.de online einkaufen
Meistgelesen
1. Kino-Kritik: Kill Me Please

Als Suizidwillige mit dem Tod konfrontiert werden, sinnen sie plötzlich nicht mehr auf das Ableben.

2. DECT-Telefon Peaq PDO250 im Test

Mit dem DECT-Telefon Peaq PDP250 schickt die Media-Saturn-Holding das erste Schnurlostelefon Marke Eigenbau ins Rennen. Im Test überzeugt das Peaq PDP250…

3. Kino-Kritik: Marley

So ausführlich wie oberflächlich präsentiert sich "Marley", die 144 Minuten lange Dokumentation über Reggae und Rastafari.

4. Adobe Photoshop Lightroom 4 im Test

Sie haben hunderte von Hochzeitsfotos geschossen und wollen die 50 besten davon zu einem Fotobuch zusammenstellen? Und das alles im Handumdrehen? Genau…


Kleines Spiel für zwischendurch

Bildergalerien
Samsung NV24 HD Praxistest: Nokia 6230i Sport-Gadgets - ISPO 2008 Namu6 2.4

Bilder-Suche

Top 5 Downloads
1
Recuva

Version: 1.42.544
Lizenz: Freeware
Betriebssystem: Windows

2
Win7codecs

Version: 3.6.2
Lizenz: Freeware
Betriebssystem: Windows

3
OnlineTV

Version: 6.2.0.2
Lizenz: Freeware
Betriebssystem: Windows

4
CCleaner

Version: 3.18.1707
Lizenz: Freeware
Betriebssystem: Windows

5
Firefox

Version: 13.0 Beta 3
Lizenz: Open Source
Betriebssystem: WindowsLinuxMac

Download-Suche