PHP Magazin

PHP, JavaScript, Open Web Technologies
X

WTC / IPC – die Serie! Viele spannende Themen – nicht nur zu den Konferenzen!

UTF-8 und die Umstellung von Websites auf dieses Encoding

UTF-8 für alle

Bettina Ramm

Aller Anfang ist schwer - zumindest diese Lebensweisheit gilt bei UTF-8 nicht. Denn eine Website in UTF-8 zu kodieren, ist am einfachsten, wenn es von Anfang an konsequent durchgeführt wird. Das Beheben von Zeichensatzfehlern, die dagegen durch inkonsistentes Encoding entstehen, ist oft einiges schwieriger und je nach vorhandenem Daten- und Dokumentenbestand vor allem zeitraubend. In diesem Artikel erfahren Sie, was hinter UTF-8 steckt, warum UTF-8 so beliebt ist und wie Sie Ihre Website Schritt für Schritt auf UTF-8 einstellen bzw. umstellen.

Bevor wir uns ansehen, was UTF-8 ist und kann, sollen zunächst ein paar Begriffe definiert werden. Wenn Sie sich grundsätzlich mit Zeichenkodierungen auskennen, und wissen, was Unicode ist, können Sie direkt bei „Dokumente in UTF-8 speichern“ weiterlesen. Ein Zeichen ist die kleinste Komponente geschriebener Sprachen, das können Buchstaben, Ideogramme (z. B. Chinesische Schriftzeichen), Satzzeichen und Ähnliches sein. Ein Zeichensatz ist eine Gruppe von Zeichen, die aufgrund gemeinsamer Merkmale zusammengefasst werden können (z. B. ein Alphabet oder ein Font). Auch ein Zeichenkodierungsschema ist ein Zeichensatz. Es definiert einen Code, mit dem Zeichen maschinenlesbar werden (siehe unten). Ist in diesem Artikel von einem Zeichensatz die Rede, ist immer ein Zeichenkodierungsschema gemeint. Man nennt es auch „Character Set“ oder „Encoding“ oder „CES“, für Character Encoding Scheme.

Encoding, Unicode und UTF-8

Damit Schriftzeichen am PC dargestellt werden können, müssen sie so kodiert werden, dass der Computer sie versteht. Und der versteht bekanntlich nur Bits und Bytes, also Nullen und Einsen. Daher wurden Zeichenkodierungsschemata entwickelt, bei denen jedes Bitmuster für ein bestimmtes Zeichen steht. Ursprünglich wurde dazu (in unserem Sprachraum) der ASCII-Code konzipiert, doch er umfasst nur 128 Zeichen, davon lediglich 96 sichtbare. Das reicht aus, um die großen und kleinen Buchstaben des lateinischen Alphabets, die Ziffern 0 bis 9 und ein paar Sonderzeichen darzustellen. Sprachspezifische Buchstaben, wie deutsche Umlaute, bleiben außen vor. Später wurden sprachspezifische CES entwickelt, für die deutsche Sprache ist das ISO-8859-1 bzw. ISO-8859-15, das auch das Euro-Zeichen enthält. Doch auch der Zeichenvorrat dieser Schemata ist begrenzt. Zwar nicht nur auf eine Sprache, aber doch auf einige wenige, die räumlich nahe beieinander liegen. Probleme entstehen spätestens dann, wenn ein Dokument Zeichen völlig verschiedener Sprachen (etwa Deutsch und Japanisch) enthält. Mit zunehmender Globalisierung und Internationalisierung wurde daher Unicode entwickelt. Unicode bezeichnet Zeichensätze, die möglichst alle Zeichen sämtlicher Sprachen umfassen. Der populärste Unicode ist dabei UTF-8 (8 bit Unicode Transformation Format), der mit einer variablen Codelänge von ein bis vier Byte pro Zeichen über 1.000.000 Zeichen darstellen kann.

Warum ist UTF-8 so bedeutend?
Es gibt verschiedene Unicode-Zeichensätze: UTF-8, UTF-16 und UTF-32 sind die bekanntesten. UTF-8 hat einen ganz entscheidenden Vorteil: Es ist rückwärtskompatibel zu ASCII. Gleiche Zeichen werden in ASCII und UTF-8 durch dasselbe Bitmuster repräsentiert. Damit wird nicht nur die Umstellung von ASCII-Dokumenten zu UTF-8 einfacher, da dabei keine Zeichen verloren gehen, sondern UTF-8 lässt sich auch für Applikationen, Dateisysteme und Netzwerkprotokolle verwenden, die eigentlich nur ASCII verstehen. UTF-16 dagegen verwendet teilweise Bitmuster, die in ASCII (andere) Kontrollzeichen darstellen. Deshalb können UTF-8-Dokumente im Gegensatz zu UTF-16 und UTF-32 auch rudimentär (mit Platzhaltern) in Applikationen dargestellt werden, die eigentlich nur ASCII verstehen.

Außerdem ist UTF-8 im Vergleich zu seinen „großen Brüdern“ wesentlich bescheidener im Hinblick auf erforderliche Ressourcen. Während UTF-16 ein Zeichen als 16-Bit-Wert speichert, kann UTF-8 einfache Zeichen, die dem Zeichenvorrat von ASCII angehören, als 8-Bit-Wert speichern. Da sich mit ASCII ein Großteil der Zeichen im westeuropäischen und amerikanischen Sprachraum darstellen lassen, können die meisten dieser Sprachen mit einem durchschnittlichen Speicheraufwand von 1.1 Byte pro Zeichen dargestellt werden. Das ist fast genauso effizient wie ASCII, aber durch die Möglichkeit, bei Bedarf insgesamt 4 Byte zu belegen, können darüber hinaus auch sehr exotische und seltene Zeichen dargestellt werden.

Außerdem lässt sich UTF-8 im Gegensatz zu anderen Multibytekodierungen sehr einfach manipulieren. Zum Beispiel lässt sich der Anfang eines Zeichens sehr einfach ermitteln. So genannte Trail-Bytes – Bytes, die über das erste Byte hinaus zur Darstellung eines Zeichens benötigt werden, werden immer durch das Bitmuster 10xxxxxx repräsentiert. Der Anfang des zugehörigen Zeichens ist dann maximal 3 Bytes weiter links zu finden. Sie können dieses Thema mit den Artikeln What is UTF-8 And Why Is It Important? und Which character encoding should I use for communicating with other software? vertiefen.

Wir wollen nun Schritt für Schritt die Punkte durchgehen, die Sie beachten müssen, um ein konsistentes UTF-8-Encoding Ihrer Webprojekte zu erreichen. Dabei ist es unwesentlich, ob Sie ein bestehendes Webprojekt umstellen oder ein neues erstellen möchten.

Dokumente in UTF-8 speichern

Für eine durchgängige Verwendung von UTF-8 ist es Voraussetzung, dass alle Dokumente Ihrer Website, die Text enthalten (*.html*.php*.css), UTF-8-kodiert gespeichert werden. Nur so werden alle Sonderzeichen im korrekten Code gespeichert, und kryptische Zeichen werden von Anfang an vermieden. Vorsicht, nicht alle Editoren „sprechen“ UTF-8. Öffnen und bearbeiten Sie Ihre Dokumente nur noch mit Editoren, die es tun. In manchen Editoren lässt sich die Zeichenkodierung beim Speichern auswählen, bei anderen gibt es eine entsprechende Option in den Programmeinstellungen. Bestehenden Dokumente müssen mit einem UTF-8-fähigen Editor geöffnet und in UTF-8 gespeichert werden. Kontrollieren Sie anschließend noch einmal alle Umlaute und Sonderzeichen der Dokumente und korrigieren sie Sie bei Bedarf. Manchmal wird den Dokumenten beim Speichern in UTF-8 ein Byte Order Mark (BOM) vorangestellt. Wenn das in Ihrem Editor optional ist, lassen Sie es weg, denn es ist bei UTF-8 nicht zwingend nötig (siehe Kasten: „UTF-8 und BOM“).

Textlaufrichtung festlegen
Auf einer UTF-8-formatierten Website sind internationale Zeichen möglich und werden fehlerfrei angezeigt, solange im Client die erforderlichen Schriftarten installiert sind. Somit ist es bei benutzergeneriertem Content auch möglich, dass Texte fremder Sprachen eingegeben werden, bei denen der Text nicht von links nach rechts, sondern von rechts nach links läuft (z. B. Hebräisch). So kann es passieren, dass der Browser, sobald er ein hebräisches Zeichen im Content entdeckt, geneigt ist, die Textlaufrichtung zu ändern. In (X)HTML lässt sich das durch Setzen des dir-Attributs im HTML-Tag unterbinden. Mit dir="ltr" legen Sie fest, dass der Text immer von links nach rechts läuft. In CSS-Dateien fügen Sie eine einzige Zeile ganz am Anfang ein: @charset "utf-8";.

 

Kommentare

Ihr Kommentar zum Thema

Als Gast kommentieren:

Gastkommentare werden nach redaktioneller Prüfung freigegeben (bitte Policy beachten).