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
die Kodierung des HTML-Editors auf UTF eistellen (1)
die Kodierung von CSS-Dateien in UTF ändern (2)
den Webserver (idR) anweisen, HTML-Seiten, CSS-Dateien usw. mit der Kodierung UTF auszuliefern (3)
die UTF-Kodierung in die XML-Deklaration hinzufügen (4)
UTF-8-Kodierung für PHP-Dateien einstellen (5)
Formulare UTF-8 kodieren. (6)
die Kodierung zusammen mit dem MIME-Typ in die Meta-Tags der HTML-/XHTML-Seiten einfügen. (7)
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.
Das Thema CSS und UTF ist schnell abgehakt, wir stellen nämlich einfach folgende Zeile an den Anfang der Stylesheets:
@charset "utf-8";
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 .htmloder
AddCharset utf-8 .css .html .xhtml
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"?>
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"
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=…
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" />
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 ", &, < und >.