Validome-Logo

HTML / XHTML / WML / XML Validator

 
Validome - Validator Startseite de | en
Validome-Logo

HTML-Fehlerdokumente zu Zeichensatzkodierungen

Als Grundlage zur Ermittlung der zu benutzenden Zeichensatzkodierung eines HTML-Dokumentes wurde die W3C-Spezifikation zu HTML 4.01 benutzt.
Allerdings lässt diese Spezifikation einige Fragen offen. Folgende Punkte sind bis zur Zeit ungeklärt bzw. widersprüchlich.
  1. Wenn keine Zeichensatzkodierungen im HTTP-Header, Byte Order Mark, Meta-Tag vorhanden ist, und keine automatische Erkennung anhand des binären Aufbaus möglich ist, wurde nicht spezifiziert welche Zeichensatzkodierung verwendet werden muss.
    Es wird empfohlen überhaupt keinen Zeichensatz anzunehmen; wie das Dokument jedoch verarbeitet werden soll wird nicht erwähnt.
    Es wird weiterhin verlangt die Spezifikation das HTTP-Protokolls RFC2616 zu ignorieren (welches für solche Fälle ISO-8859-1) vorsieht, eine Alternative wird jedoch auch hier nicht geboten.
  2. Grundsätzlich hat die Zeichensatzangabe im HTTP-Header eine höhere Priorität als im Meta-Tag.
    Wenn ein HTML-Dokument jedoch z.B. in UTF-16 mit Byte Order Mark kodiert ist, bleibt die Frage offen welche Priorität diese Kodierung besitzt.
    Die Frage, wie zu verfahren ist, wenn die Zeichensatzkodierung anhand des binären Aufbaus des Dokumentes ermittelt werden kann, bleibt auch hier Unbeantwortet.
Aufgrund dieser Verhältnisse sehen wir uns genötigt eigene Verarbeitungsregeln anzuwenden. Diese arbeiten wie folgt:
  1. Wenn keine Zeichensatzkodierungen im HTTP-Header, Byte Order Mark, Meta-Tag vorhanden ist, und keine automatische Erkennung anhand des binären Aufbaus möglich ist, brechen wir die Verarbeitung mit einer Fehlermeldung ab
  2. Die Reihenfolge zur Ermittlung der Zeichenkodierung eines HTML-Dokuments arbeitet wie folgt (von der höchsten zur niedrigsten Priorität):
    1. Einen HTTP-charset-Parameter in einem Content-Type-Feld.
    2. Wenn ein Byte Order Mark vorhanden ist, wird dieser benutzt.
    3. Wenn die Zeichensatzkodierung automatisch erkannt werden kann (anhand des binären Aufbaus des Dokumentes), kommt dieser zur Anwendung.
    4. Eine META-Deklaration mit http-equiv, gesetzt auf Content-Type und einem gesetzten Wert für charset.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/html; charset=ISO-8859-1

  1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2:      "http://www.w3.org/TR/html4/loose.dtd">
  3: 
  4: <html>
  5:   <head>
  6:     <title>no error</title>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  8:   </head>
  9:   <body></body>
 10: </html>

Dieses Dokument enthält eine gültige Zeichensatzangabe im Meta-Tag und im HTTP-Header.

Es muss die Zeichensatzkodierung des HTTP-Header verwendet werden.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/html

  1: EF BB BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2:      "http://www.w3.org/TR/html4/loose.dtd">
  3: 
  4: <html>
  5:   <head>
  6:     <title>Byte order Mark != Meta-Charset</title>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Dieses in UTF-8 kodiertes HTML-Dokument möchte laut Meta-Tag mit ISO-8859-1 verarbeitet werden.
Auf diesen Konflikt sollte hingewiesen werden.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/html; charset=UTF-8

  1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2:      "http://www.w3.org/TR/html4/loose.dtd">
  3: 
  4: <html>
  5:   <head>
  6:     <title>HTTP-Header != Meta-Charset</title>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Die Zeichensatzkodierung im Meta-Tag weicht von der Zeichensatzkodierung im HTTP-Header ab.

Es muss die Zeichensatzkodierung des HTTP-Header verwendet werden.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/html

  1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2:      "http://www.w3.org/TR/html4/loose.dtd">
  3: 
  4: <html>
  5:   <head>
  6:     <title>missing http-charset</title>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  8:   </head>
  9:   <body>äöüÄÖÜß?</body>
 10: </html>

Im HTTP-Header fehlt die Zeichensatzkodierung.

Es muss die Zeichensatzkodierung des Meta-Tag verwendet werden.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/html; charset=UTF-8

  1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2:      "http://www.w3.org/TR/html4/loose.dtd">
  3: 
  4: <html>
  5:   <head>
  6:     <title>missing meta-charset</title>
  7:   </head>
  8:   <body>äöüÄÖÜß</body>
  9: </html>

In diesem Beispiel fehlt im Dokument jegliche Angabe zu einer Zeichensatzangabe. Nur im HTTP-Header wird die zu benutzende Zeichensatzkodierung mitgeteilt. Da keine Zeichensatzkodierung zu ermitteln ist, wenn das Dokument nicht per HTTP übertragen wird (z.B. bei einer lokalen Kopie), wird ein Hinweis ausgegeben.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/html

  1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2:      "http://www.w3.org/TR/html4/loose.dtd">
  3: 
  4: <html>
  5:   <head>
  6:     <title>missing all-charset</title>
  7:   </head>
  8:   <body>äöüÄÖÜß</body>
  9: </html>

Es wurde weder im Meta-Tag, Byte Order Mark oder im HTTP-Header eine Zeichensatzkodierung gefunden.

Die W3C-Spezifikation verlangt zwar RFC2616 zu ignorieren, und somit die Verwendung von ISO-8859-1, sie sagt aber nicht welche Zeichensatzkodierung stattdessen verwendet werden soll.
Aus diesem Grund haben wir uns dazu entschlossen in solchen Fällen die Validierung mit einer Fehlermeldung abzubrechen.
Ab hier folgen Beispiele mit HTML-Dokumenten, welche in UTF-16 kodiert sind.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/html; charset=UTF-16

  1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2:      "http://www.w3.org/TR/html4/loose.dtd">
  3: 
  4: <html>
  5:   <head>
  6:     <title>no error UTF-16 without byte order mark</title>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=utf-16">
  8:   </head>
  9:   <body>äöüÖÄÜß</body>
 10: </html>

Dieses HTML-Dokument wurde in UTF-16 mit fehlenden Byte Order Mark kodiert und enthält keine Fehler.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/html; charset=UTF-16

  1: FF FE<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2:      "http://www.w3.org/TR/html4/loose.dtd">
  3: 
  4: <html>
  5:   <head>
  6:     <title>no error UTF-16 with byte order mark</title>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=utf-16">
  8:   </head>
  9:   <body>äöüÖÄÜß</body>
 10: </html>

Dieses HTML-Dokument wurde in UTF-16 mit vorhandenem Byte Order Mark kodiert und enthält keine Fehler.
Die folgende Beispiele sind in UTF-16 inklusive Byte Order Mark kodiert.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/html; charset=ISO-8859-1

  1: FF FE<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2:      "http://www.w3.org/TR/html4/loose.dtd">
  3: 
  4: <html>
  5:   <head>
  6:     <title>UTF-16; HTTP-Header != BOM</title>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=utf-16">
  8:   </head>
  9:   <body></body>
 10: </html>

In diesem Beispiel weicht die Zeichensatzangabe im HTTP-Header von der Kodierungsinformation des Byte Order Mark ab.
Als Zeichensatzkodierung wird in solchen Fällen die Angabe im HTTP-Header verwendet.
Da in diesem Beispiel das Dokument in UTF-16 kodiert ist, aber mit ISO-8859-1 verarbeitet werden muss, sollten diverse Parserfehler auftreten.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/html; charset=UTF-16

  1: FF FE<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2:      "http://www.w3.org/TR/html4/loose.dtd">
  3: 
  4: <html>
  5:   <head>
  6:     <title>UTF-16; HTTP-Header != META</title>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Die Zeichensatzkodierung im Meta-Tag weicht von der Zeichensatzkodierung des HTTP-Header ab.

Es muss die Zeichensatzkodierung des HTTP-Header verwendet werden.

  Validome W3C-Validator WDG-Validator Total-Validator Site Valet-Validator

HTTP-Header:
Content-Type: text/html

  1: FF FE<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2:      "http://www.w3.org/TR/html4/loose.dtd">
  3: 
  4: <html>
  5:   <head>
  6:     <title>UTF-16; BOM != META</title>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  8:   </head>
  9:   <body>äöüÄÖÜß</body>
 10: </html>

Dieses in UTF-16 kodierte HTML-Dokument möchte laut Meta-Tag mit ISO-8859-1 verarbeitet werden. Laut Byte Order Mark handelt es sich aber um ein in UTF-16 kodiertes Dokument.
Auf diesen Konflikt sollte hingewiesen werden.

nach oben   v3.0.0 - 16.11.2010 © validome.org - all rights reserved Datenschutzerklärung

Valid XHTML 1.0