Umfassende Erklärung Charsets/Encoding

lay-z-cow

Erfahrenes Mitglied
Hi,

ich stelle diese Frage jetzt einfach mal im PHP-Forum, aber natürlich betrifft das eigentliche problem auch andere Bereiche.

In letzter Zeit hatte ich mal wieder mit einem der nervigsten aller Probleme zu tun: Falsche Enkodierungen können einem echt den Tag vermiesen. ;)

Die üblichen Werkzeuge, wie Funktionen á la utf8_decode() sind mir durchaus bekannt, aber ich dachte mir es wird an der Zeit sich da mal richtig schlau zu machen.

Daher meine Frage:
Kennt jemand ein gutes Online-Tutorial/Artikel oder auch ein Buch, welches sich mit dieser Thematik auseinandersetzt und vielleicht auch den ein oder anderen "Königsweg" als Vorschlag bereithält? ;)

Bin für alle Antworten dankbar.


Gruß

.:lay-z-cow:.
 
Direkt vorab: mir ist so etwas nicht bekannt. Vor allem wenn man mal im WWW nach einer Möglichkeit sucht, eine bestehende MySQL Datenbank von Latin1 nach UTF-8 zu konvertieren, ist man ziemlich aufgeschmissen.

Für jedes neue Projekt sollte man eigentlich immer auf Unicode setzen, um zukünftig Probleme zu vermeiden und das ganze auch ausbaufähig zu halten (sprich: Lokalisierung und Internationalisierung).

Interessant ist, dass du gerade utf8_decode() erwähnst: diese Funktion ist zwar ganz nett, klappt aber nicht immer, wie man es sich erhofft (meine Erfahrung). Daher verweise ich immer auf die Multibyte-Funktionen - diese bieten einerseits mehr Funktionen mit, andererseits hatte ich damit noch nie Probleme.


Prinzipiell muss man sich nur an folgende Punkte halten (evtl. Fehlen ein paar):
* Alle Dateien müssen im UTF-8 Format gespeichert werden
* der Editor muss also UTF-8 unterstützen
* Multibyte Funktionen bringen Sicherheiten bei der Verwendung von Strings, sollte auch nur an entsprechenden Stellen benutzt werden
* Die Datenbank sollte UTF-8 kodierte Daten liefern (meist mit "SET NAMES utf-8")
* Die Datenbank, die Tabellen und alle Spalten, die Strings enthalten könnten, sollten auf utf8_unicode_ci oder utf8_general_ci stehen. Unterschiede findet man im MySQL Manual
* Der Apache Webserver sollte als AddDefaultCharset UTF-8 haben
* ebenso muss in der php.ini das DefaultCharset (oder DefaultEncoding, hab ich grade nicht im Kopf) auf utf-8 gesetzt werden

Wenn dann noch der (X)HTML Header richtig eingestellt ist dürfte jeder Validator die Codierung richtig erkennen und der Browser sollte im Standard Compliance Mode arbeiten.



Gruß Radhad
 
Michael Jendryschik bietet in seiner Einführung in XHTML, CSS und Webdesign eine recht anschauliche Erklärung für die zu unterscheidenden Begriffe Zeichenvorrat, Zeichensatz und Zeichenkodierung, wobei gerade letztere Begriffe häufig verwechselt werden, da sie auch sehr eng miteinander verwandt sind. Weitergehend sollte auch zwischen Zeichen und Glyphe unterschieden werden.

Dabei möchte ich dich mit meinem Webkrauts-Artikel Zeichensätze und Zeichenkodierungen auch noch auf die Wichtigkeit der korrekten Angabe der Zeichenkodierung hinweisen, da es sonst zu unschönen Fehlern kommen kann.
 
Zurück