dciwam.de / faq / html / entities

Entities für Umlaute und Sonderzeichen

Mein CSE-Validator meckert immer mit folgende Fehlermeldung, wenn ich Umlaute nicht "maskiere":

"ASCII value greater than 127 found, HTML documents should not contain these values. Consider using ö (für ö) instead."

Ist das alles Unsinn oder unnötiger Arbeitsschritt, was man sich ersparen kann?

Welche Zeichensatz / Kodierung muss als <meta http-equiv="Content-Type" content="text/html; charset=..."> angegeben werden, damit die Umlaute und Sonderzeichen dargestellt werden können? Etwa Unicode/iso-10646?

HTML Tidy aufzurufen und ihn die Konvertierung durchführen zu lassen ist ja kein zusätzlicher "Arbeitsschritt" :-).

Ich lass es mal dahingestellt, ob es "ASCII values" gibt, in jedem Fall hat US-ASCII nur 128 Zeichen (viele davon Steuerzeichen), daher kann man keine "ASCII values" grösser als 127 finden. HTTP ist ein 8 Bit sicheres Protokoll, daher gibt es kein ersichtlichen Grund, warum man nicht auch 8 Bit Zeichen verwenden sollte, auch die Browser haben kein Problem damit, zumindest bei Verwendung von ISO-8859-1, was für unsere westlichen Skripte völlig ausreichend sein dürfte. Man muss die richtige Kodierung natürlich auch angeben.

Es muss ein gültiger Zeichensatz / Kodierung aus http://www.iana.org/assignments/character-sets sein, "Unicode/iso-10646" wirst du dort nicht finden können, ISO-10646-UCS-2 oder ISO-10646-UCS-4 wäre passender.

Wenn du nur Entities benutzt, also &ouml; usw. dann müsstest du nichts angeben, generell sollte die Angabe auch im HTTP Header geschehen und nicht im Dokument selber. Dort ist es nur sinvoll, wenn das Dokument gerade nicht über HTTP übertragen wird.

Wenn du 8 Bit Zeichen benutzen willst, solltest du auf ISO-8859-1 zurückgreifen, wenn das möglich ist.

Es gibt nunmal viele Möglichkeiten das Zeichen 'ö' (U+00F6) zu kodieren, ein paar Beispiele für ein XHTML Dokument:

&#x00f6;  <!-- hexadezimale Zeichenreferenz mit 4 Stellen -->
&#xf6;    <!-- hexadezimale Zeichenreferenz mit 2 Stellen -->
&#246;    <!-- dezimale Zeichenreferenz -->
&ouml;    <!-- Entity-Referenz auf eine benannten Entity --->
<!-- das entspricht ö wenn der Browser die DTD korrekt verarbeitet -->

Diese Kodierungen sind Zeichensatz-unabhängig, man kann sie immer verwenden, egal welchen Zeichensatz man benutzt. Jetzt kann man natürlich auch verschiedene Zeichensätze benutzen, in diesem Postings ist das z.B. ISO-8859-1

 \xF6      <!-- ISO-8859-1 -->
 \xC3\xB6  <!-- UTF-8 -->
 \x00\xF6  <!-- UTF-16 -->
 \x94      <!-- CP850 -->
 ...

Je nachdem welche Kodierung du und dein Editor benutzen, musst du sie entsprechend angeben. Unter Windows wird das meist Windows-1252 sein, was ISO-8859-1 entspricht, so man keine Zeichen von 128-159 benutzt, die es in ISO-8859-1 nicht gibt. Das entspricht dann

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

Da aber alle XML Prozessoren UTF-8 und UTF-16 unterstützen müssen, wird man langfristig mit UTF-8 (UTF-16 ist nicht für die übertragung über HTTP oder andere MIME verwandte Protokolle geeignet) am besten auskommen können.

Björn Höhrmann • bjoern@hoehrmann.dehttp://www.bjoernsworld.de

übrigens ist "CSE-Validator" kein "HTML Validator" wie das als SGML-Fachbegriff verstanden wird: CSE gilt eher als "Checker" oder "Linter". Dazu Was ist ein Checker / Linter?

Alan J. Flavell • http://ppewww.ph.gla.ac.uk/~flavell/

Zum Seitenanfang

URL: http://dciwam.de | Letzte Änderung: 30.05.2009 | G. Schneider | Kontakt