Das <head>-Element und die Zeichenkodierung UTF-8 im HTML5
Metadaten-Informationen einer HTML5-Webseite
Das erste Kind des Wurzelelements ist üblicherweise das <head>
-Element. Das <head>
-Element enthält Metadaten-Informationen über die Seite, nicht den Inhalt der Seite selbst. (Der steht im darauf folgenden <body>
-Element.) Das <head>
-Element selbst ist ziemlich langweilig und hat sich in HTML5 kaum auf interessante Weise geändert. Das Gute ist das, was im <head>
-Element steht. Und dazu wenden wir uns wieder unserer Beispielseite zu:
Erster Schritt: das <meta>
-Element.
Zeichenkodierung
Wenn Sie an "Text" denken, denken Sie wahrscheinlich "Zeichen und Symbole, die ich auf meinem Bildschirm sehe". Aber Computer befassen sich nicht mit Zeichen und Symbolen. Computer befassen sich mit Bits und Bytes. Jedes bisschen Text, das Ihnen je auf einem Bildschirm vor Augen trat, wird eigentlich in einer bestimmten Zeichenkodierung gespeichert. Es gibt unzählige unterschiedliche Zeichenkodierungen. Einige von ihnen sind für bestimmte Sprachen wie Russisch oder Chinesisch oder Englisch gedacht, andere können für viele Sprachen verwendet werden. Grob formuliert, könnte man sagen, dass die Zeichenkodierung die Zuordnung zwischen dem ist, was Sie auf dem Bildschirm sehen, und dem, was Ihr Computer im Speicher und auf der Festplatte speichert.
In Wirklichkeit ist das natürlich etwas komplizierter.
Viele Zeichen tauchen in verschiedenen Kodierungen auf, aber jede dieser Kodierungen kann eine andere Folge von Bytes nutzen, um diese Zeichen tatsächlich im Speicher oder auf der Festplatte zu speichern. Sie können sich eine Zeichenkodierung also als eine Art Entschlüsselungs-Mechanismus für Text vorstellen. Gibt Ihnen jemand eine Folge von Bytes und behauptet, es sei "Text", müssen Sie wissen, welche Zeichenkodierung genutzt wurde, damit Sie die Bytes wieder in Zeichen umrechnen und anzeigen (oder irgendwie verarbeiten) können.
Wie also ermitteln Browser tatsächlich die Zeichenkodierung der Byte-Streams, die der Server sendet? Ich bin froh, dass Sie das fragen. Wenn Sie mit HTTP-Headern vertraut sind, haben Sie vielleicht schon einmal einen Header dieser Form gesehen:
Kurz und knapp sagt diese Zeile, dass der Server denkt, er sende Ihnen ein HTML-Dokument, das die Zeichenkodierung UTF-8 nutzt. Unglücklicherweise haben im großen Brei des World Wide Web nur äußerst wenige Autoren die Kontrolle über ihre HTTP-Server. Denken Sie an Blogger: Der Inhalt wird von den unterschiedlichsten Personen geschaffen, die Server werden von Google gesteuert. Deswegen bot HTML 4 eine Möglichkeit, die Zeichenkodierung im HTML-Dokument selbst anzugeben. Auch das haben Sie wahrscheinlich schon gesehen:
Dieses sagt, dass der Webautor meint, er habe ein HTML-Dokument unter Verwendung der Zeichenkodierung UTF-8 geschrieben.
Beide Techniken funktionieren auch in HTML5 noch. Der HTTP-Header ist die bevorzugte Methode und überschreibt ein eventuell vorhandenes <meta>
-Tag. Aber da nicht jeder HTTP-Header setzen kann, gibt es das <meta>
-Tag immer noch. Und es ist in HTML5 sogar noch etwas einfacher geworden. Es sieht jetzt folgendermaßen aus:
Der Grund für die <meta charset="">
-Attributkombination ist, dass UAs sie bereits implementieren, weil viele dazu neigen, die Dinge folgendermaßen ohne Anführungszeichen anzugeben:
Zusammengefasst: Die Sache mit der Zeichenkodierung ist eine komplizierte Angelegenheit, die durch Jahrzehnte schlecht geschriebener Software, die von Autoren verwendet wird, deren bevorzugte Arbeitstechnik immer noch Copy-and-Paste ist, nicht gerade vereinfacht wird. Sie sollten bei jedem HTML-Dokument grundsätzlich eine Zeichenkodierung angeben, da es andernfalls zu üblen Folgen kommen kann. Sie können das über den HTTP-Content-Type-Header, die <meta http-equiv>
-Deklaration oder die kürzere <meta charset>
-Deklaration tun. Aber vergessen Sie sie nicht. Das Web wird es Ihnen danken.