UTF-8 und die Entity

-- 24.September 2005 (#42)

Der Anfang aller Zeichensätze war ASCII. ASCII erlaubt 128 Zeichen, 32 davon sind nicht-visuelle Steuerzeichen. So kann man mit ASCII also maximal 96 Zeichen darstellen – für die Anfänge der Informatik, die fast ausschließlich auf die Buchstaben des englischen Alphabets zurückgriff, war das noch ausreichend. Sonderzeichen aus anderen Sprachen, wie die deutschen Umlaute ä, ü, ö und ß, konnten durch HTML Entities dargestellt werden.
Eine HTML Entity beginnt stets mit einer Et-Ligatur (&) und endet mit einem Semikolon (;). Dazwischen befindet sich eine Codierung mit maximal 6 Buchstaben. Für die Umlaute ä, ü, ö und ß sind die Entities ä, ü, ö und ß.

Später begann man, Zeichensätze (Code Pages) einzuführen, um auch die Sonderzeichen der Westeuropäern ohne spezielle Codierung mit HTML Entities zu ermöglichen. Der Zeichensatz für die deutsche Sprache ist ISO8859-1 bzw. ISO8859-15 (mit Euro-Zeichen). Entities können zwar weiterhin benutzt werden, sind aber dadurch nicht mehr zwingend notwendig.
Leider kann man mit den Zeichensätzen nur sehr begrenzt Zeichen aus verschiedenen Sprachen darstellen. Die gleichzeitige Darstellung von deutschen und französischen Sonderzeichen funktioniert problemlos, aber Deutsch und Hebräisch würden ernsthafte Probleme bereiten.

Die nächste Stufe der „Sonderzeichen-Reform“ ist Unicode. Die gängigste Unicode-Kodierung lautet UTF-8. UTF-8 steht für 8-bit Unicode Transformation Format. Mit UTF-8 können bis zu 4 Byte, das heißt 1.114.112 Zeichen dargestellt werden. 1.114.112 Zeichen, um die Zeichen aller Sprachen aufzunehmen und jedem Zeichen eine eindeutige Nummer zu geben. Mit UTF sind HTML-Entitäten also (in der Theorie) überflüssig und verschiedenste Sprachen können in ein und demselben Dokument problemlos dargestellt werden.

Um bei HTML und XHTML auf UTF-8 zu setzen, sollte man


1. UTF-8-Kodierung im HTML-Editor einstellen

In den besseren Editoren ist es möglich, die Kodierung einfach in den Einstellungen zu ändern. Als Beispiel ist hier rechts nebenstehend der Einstellungsdialog von Bluefish dargestellt.
Durch die Kodierung als UTF wird eine BOM in die Dateien geschrieben. An Hand der BOM, welche eine Sequenz von Bytes vor einer Datei ist, kann ein Client (Browser) erkennen werden, welches Encoding benutzt werden soll.

2. CSS-Dateien und Unicode

Das Thema CSS und UTF ist schnell abgehakt, wir stellen nämlich einfach folgende Zeile an den Anfang der Stylesheets:

@charset "utf-8";


3. Webserver (Apache) für UTF-8 vorbereiten

Um den Webserver explizit anzuweisen, dass wir unsere Seiten in UTF ausliefern wollen, fügen wir folgende Zeilen hinzu (.htaccess wäre eine Möglichkeit):

AddType text/css;charset=utf-8 .css
AddType text/html;charset=utf-8 .html

oder

AddCharset utf-8 .css .html .xhtml


4. UTF-Kodierung in der XML-Deklaration

Im Prinzip ist dieser Schritt unnötig, weil XHTML-Dateien per se UTF-8-kodiert sind, aber wer sicher gehen will, kann diese Zeile seinen XHTML-Seiten voranstellen:

<?xml version="1.0" encoding="utf-8"?>


5. UTF-8-Kodierung für PHP-Dateien

Entweder man ändert den PHP-Header:

header('content-type: text/html; charset=utf-8');

oder – in so fern man Zugriff auf diese Datei hat – in der php.ini:

default_mimetype = "text/html"
default_charset = "utf-8"


6. UTF-8 für Formular-Eingaben

Damit Besucher in Formularen ebenfalls sämtliche Zeichen, die UTF-8 kennt, eingeben können, bedarf es dem Hinzufügen des Attributs accept-charset:

<form accept-charset="utf-8" method=…


7. UTF und Meta-Tags

Für HTML:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

Für XHTML:

<meta http-equiv="content-type" content="application/xhtml+xml;charset=utf-8" />


Schlussbemerkung

Wenn alle Vorkehrungen für UTF-8 getroffen wurden, dann sollte es keine Schwierigkeiten geben. Manches mag doppelt gemoppelt wirken, aber so werden Probleme umgangen.
Es kann allerdings vorkommen, dass man die Einstellungen des Servers nicht ändern kann, weil der Server-Betreiber sehr restriktive Zugriffseinstellungen hat. Dann kann muss man womöglich doch wieder auf HTML-Entitäten zurückgreifen. Alternativ kann man auch (hexadezimale) Unicodes benutzen. HTML-Entities können nämlich auch bei UTF weiterhin benutzt und auch mit Unicodes problemlos kombiniert werden.

Für die Zeichen ", &, < und > sollten auch bei „funktionierendem“ UTF weiterhin als HTML Entities geschrieben werden. Die Entitäten lauten &quot;, &amp;, &lt; und &gt;.