Accesskey n springt zur Seitennavigation. Springe zum Inhalt.
Dieses Dokument ist eine Übersetzung. Im Falle von Abweichungen oder Fehlern sollte das aktuelle englische Original als maßgeblich angenommen werden. Das W3C besitzt das Copyright am Original, wie unten beschrieben.
Übersetzer: Gunnar Bittersmann
Zielgruppe: XHTML/HTML-Autoren (die Web-Editoren/Texteditoren oder Scripte benutzen), Script-Entwickler (PHP, JSP u.a.) und alle, die Rat suchen, wie und wann Alternativen zu den Zeichen in einem Dokument zu verwenden sind.
Wie verwendet man Zeichen-Escapes (Maskierungen) in Markup und CSS, wann sollte man sie verwenden und wann nicht?
Jedes Unicode-Zeichen lässt sich in XML oder (X)HTML durch ein Zeichen-Escape darstellen (maskieren); in diesem kommen dann ausschließlich ASCII-Zeichen vor.
Numerische Zeichenreferenzen und Zeichen-Entity-Referenzen sind Arten von Zeichen-Escapes, die im Markup verwendet werden können. Das geschützte Leerzeichen (U+00A0 NO-BREAK SPACE) bspw. lässt sich folgendermaßen repräsentieren:
(Das geschützte Leerzeichen sieht wie ein normales Leerzeichen aus, verhindert aber einen Zeilenumbruch zwischen den Zeichen links und rechts davon. Es findet u.a. in der französischen Zeichensetzung Verwendung, wo vor Satzzeichen wie Doppelpunkten und Ausrufezeichen ein Leerzeichen steht, die Satzzeichen aber nicht am Anfang einer neuen Zeile stehen sollen.)
 <p>Vive la France !</p> <p>Vive la France !</p> Á den Großbuchstaben Á, á hingegen den Kleinbuchstaben á.
<p>Vive la France !</p>Ein wichtiger Punkt ist, dass die Werte von numerischen Zeichenreferenzen (wie € oder € für das Euro-Zeichen €) als Zeichencode von Unicode-Zeichen interpretiert werden – unabhängig von der Zeichencodierung des Dokuments. Es ist ein häufiger Fehler, wenn Autoren in Windows-1252-codierten Texten das Euro-Zeichen als € notieren. Zwar liegt das Euro-Zeichen in der Windows-1252-Codepage auf Position 80 (hexadezimal); aber € sollte ein Steuerzeichen ergeben, denn das Escape wird aufgelöst zu dem Zeichen auf Position 80 (hexadezimal) im Unicode-Repertoire. (Allerdings korrigieren manche Browser diesen Fehler stillschweigend. Siehe diese Testseiten.)
In CSS werden Zeichen-Escapes anders gebildet. Sie beginnen mit einem Backslash \ gefolgt von der Hexadezimalzahl, die den Zeichencode des Zeichens in Unicode angibt.
Wenn danach ein Zeichen folgt, das nicht in den Bereichen A–F, a–f oder 0–9 liegt, ist das alles, was nötig ist. Das folgende Beispiel repräsentiert das Wort émotion:
.\E9motion { ... }Wenn hingegen das nachfolgende Zeichen eines ist, das als Hexadezimalziffer dienen kann, wäre nicht klar, wo die Hexadezimalzahl endet. In diesen Fällen gibt es zwei Möglichkeiten. Die eine ist, ein Leerzeichen nach dem Zeichen-Escape zu setzen. Dieses Leerzeichen ist Teil der Escape-Syntax und bleibt nicht erhalten, nachdem das Escape geparst wurde. Das folgende Beispiel zeigt, wie das Wort édition repräsentiert werden kann:
.\E9 dition { ... }Alternativ lann man eine 6-stellige Hexadezimalzahl verwenden, mit oder ohne Leerzeichen danach. Dies ist eine andere Möglichkeit, édition zu repräsentieren:.
.\0000E9dition { ... }Da ein White-space-Zeichen hinter der Hexadezimalzahl zum Escape dazugehört, muss man, wenn hinter dem escapeten Zeichen wirklich ein Leerzeichen erscheinen soll, hinter der Hexadezimalzahl (beliebiger Länge) zwei Leerzeichen setzen.
Ein Backslash kann in CSS auch vor einem Syntax-Zeichen verwendet werden, damit dieses nicht als Teil des Codes angesehen wird. Für weitere Informationen über CSS-Escapes siehe CSS-2.1-Spezifikation (bzw. die deutsche Übersetzung der CSS-2.0-Spezifikation).
Es ist fast immer besser, eine Zeichencodierung zu benutzen, die es erlaubt, die Zeichen in ihrer normalen Form zu verwenden, anstatt Zeichen-Entity-Referenzen oder numerische Zeichenreferenzen zu verwenden.
Die Verwendung von Escapes macht den Quelltext schlechter lesbar und schwerer zu pflegen und kann auch die Dateigröße beträchtlich erhöhen.
Viele englischsprachige Entwickler gehen davon aus, dass andere Sprachen nur gelegentlich Nicht-ASCII-Zeichen verwenden, aber dem ist nicht so.
Nehmen wir als Beispiel folgende Passage auf Tschechisch:
Jako efektivnější se nám jeví pořádání tzv. Road Show prostřednictvím našich autorizovaných dealerů v Čechách a na Moravě, které proběhnou v průběhu září a října.
Wenn für alle Nicht-ASCII-Zeichen numerische Zeichenreferenzen verwendet werden, wird die Passage unlesbar, schwierig zu pflegen und deutlich länger. Es wäre natürlich noch schlimmer bei einer Sprache, die überhaupt keine lateinischen Buchstaben verwendet.
Jako efektivnĕjší se nám jeví pořádání tzv. Road Show prostřednictvím našich autorizovaných dealerů v Čechách a na Moravě, které proběhnou v průběhu září a října.
Wie bereits gesagt, besser die richtigen Zeichen für normalen Text verwenden, keine Escapes.
Verwendung in XML: Die Verwendung von Zeichen-Entity-Referenzen in XML wird problematisch, wenn die Entities extern (nicht im Dokument selbst) definiert werden und die XML-Prozessoren die externen Dateien nicht lesen. Dann werden die Entity-Referenzen nicht durch die entsprechenden Zeichen ersetzt. Wenn wirklich Escapes benötigt werden, ist es deshalb sicherer, numerische Referenzen zu verwenden oder die benötigten Entities im Dokument selbst zu definieren.
Wenn in HTML-definierte Zeichen-Entity-Referenzen (wie á) verwendet werden, um Zeichen in XHTML zu repräsentieren, ist Vorsicht geboten, wenn der Inhalt von XML-Werkzeugen verarbeitet wird oder in XML transformiert wird.
Syntax-Sonderzeichen: Es gibt 3 Zeichen, die im Inhalt immer als Escapes auftreten sollten, damit sie nicht die Syntax der Auszeichnungssprache beeinflussen. Diese sind Sprachbestandteile von XML bzw. HTML:
< (<)
> (>)
& (&)
Auch sollte das doppelte Anführungszeichen (") durch " und das einfache Anführungszeichen (') durch ' repräsentiert werden – besonders in Attributwerten, wenn dasselbe Anführungszeichen, das den Attributwert umgibt, auch in diesem vorkommt. Zu beachten ist dabei jedoch, dass ' zwar in XML definiert ist, nicht aber in HTML 4.01, und manche Browser unterstützen ' in HTML nicht. Aus diesem Grund empfiehlt die XHTML-Spezifikation im Anhang C.16, stattdessen ' zu verwenden, wenn der Text an einen HTML-Browser geschickt wird.
Lücken der Zeichencodierung: Escapes können nützlich sein, um Zeichen zu repräsentieren, die von der für das Dokument gewählten Zeichencodierung nicht unterstützt werden, z.B. um chinesische Zeichen in einem ISO-8859-1-codierten Dokument zu repräsentieren. Man sollte sich zunächst aber fragen, warum man nicht die Zeichencodierung ändert und eine verwendet, die alle im Dokument vorkommenden Zeichen abdeckt (wie UTF-8).
Probleme bei der Eingabe: Wenn es der Web-Editor bzw. Texteditor nicht ermöglicht, benötigte Zeichen auf einfache Weise einzugeben, kann man auch auf Escapes ausweichen. Dies stellt jedoch keine Langzeitlösung dar und ist auch umständlich, wenn viele Zeichen auf diese Art eingegeben werden müssen – es braucht mehr Zeit und macht die Pflege schwieriger. Besser ist die Verwendung eines Editors, der die Eingabe dieser Zeichen als Zeichen ermöglicht. Wenn nur gelegentlich ein solches Zeichen benötigt wird, kann als Alternative auch eine Zeichentabelle oder ein Zeichenwähler benutzt werden.
Unsichtbare oder nicht unterscheidbare Zeichen: Eine besonders nützliche Rolle spielen Escapes für die Repräsentation von Zeichen, die in der Darstellung nicht sichtbar oder nicht unterscheidbar sind.
Ein Beispiel dafür wäre das Unicode-Zeichen 200F: RIGHT-TO-LEFT MARK. Dieses Zeichen kann verwendet werden, um die Schreibrichtung in bidirektionalem Text anzugeben (wenn auch arabische oder hebräische Schrift vorkommt). Es wird nicht grafisch dargestellt, wodurch schwierig zu erkennen ist, wo solche Zeichen im Text vorhanden sind; und wenn sie fehlen oder verloren gehen, kann das zu unerwarteten Ergebnissen bei der späteren Bearbeitung des Textes führen. Bei der Verwendung von ‏ (oder der entsprechenden numerischen Referenz ‏) hingegen ist es leicht, diese Zeichen zu erkennen.
Ein Beispiel für ein nicht unterscheidbares Zeichen ist das geschützte Leerzeichen 00A0: NO-BREAK SPACE. Dieses verhindert einen Zeilenumbruch, sieht aber genauso aus wie ein normales Leerzeichen. Die Verwendung von (oder  ) macht klar ersichtlich, wo solche geschützten Leerzeichen im Text vorkommen.
Am besten wählt man die richtige Zeichencodierung, damit man in CSS-Angaben die richtigen Zeichen verwenden kann. Dieser Abschnitt behandelt, was ein seltener Ausnahmefall sein sollte, wenn Escapes verwendet werden sollen.
Es ist generell angebracht, Darstellungsinformationen in einem externen Stylesheet oder in einem style-Element im Kopf einer XHTML- bzw. HTML-Datei anzugeben. Ausnahmsweise oder vielleicht nur kurzzeitig kann stattdessen ein style-Attribut für ein bestimmtes Element verwendet werden. In ganz seltenen Fällen sollen vielleicht ein oder mehrere Zeichen in dem style-Attribut durch Zeichen-Escapes maskiert werden.
In einem style-Attribut können in XHTML oder HTML Zeichen durch numerische Zeichenreferenzen, Entity-Referenzen oder CSS-Escapes repräsentiert werden. In einem style-Element hingegen können weder numerische Zeichenreferenzen noch Entity-Referenzen vorkommen, und dasselbe gilt für ein externes Stylesheet.
Weil die Tendenz dahin geht, in Attributen angegebene Stile ins style-Element oder ein externes Stylesheet zu verschieben (dies kann auch automatisch durch eine Applikation oder ein Script geschehen), ist es am sichersten, ausschließlich CSS-Escapes zu verwenden.
Es ist bspw. besser,
<span style="font-family: L\FC beck">...</span>
zu schreiben, und nicht
<span style="font-family: Lübeck">...</span>
Der Wechsel zu UTF-8 bedeutet erneutes Speichern der Datei: Bei Verwendung einer Zeichencodierung wie UTF-8 kann auf die meisten Escapes verzichtet werden und einfach mit den Zeichen selbst gearbeitet werden. Um die Zeichencodierung eines Dokuments zu ändern, genügt es nicht, nur die Angabe der Zeichencodierung am Anfang der Seite oder auf dem Server zu ändern. Man muss das Dokument erneut speichern – in eben dieser Zeichencodierung. Für weitere Information, wie das in einem Anwendungsprogramm zu tun ist, siehe Einstellung der Zeichencodierung in Web-Editoren und Texteditoren.
Hexadezimal oder dezimal: Im Unicode-Standard werden die Zeichencodes hexadezimal angegeben, der Code des Zeichens á bspw. als U+00E1. Wegen dieser Konvention ist es ratsam, aber nicht zwingend, dass bei numerischen Zeichenreferenzen die Werte hexadezimal notiert werden, nicht dezimal. Führende Nullen sind nicht erforderlich, d.h. á kann auch durch á repräsentiert werden.
Ergänzende Zeichen (supplementary characters): Das sind die Unicode-Zeichen mit Zeichencodes jenseits derer der Zeichen der Basic Multilingual Plane (BMP). In UTF-16 wird ein solches Zeichen durch zwei 16-Bit-Ersatz-Zeichencodes (surrogate code points) aus der BMP codiert. Deshalb denken manche, dass diese Zeichen durch zwei Escapes repräsentiert werden, aber das ist falsch – es muss der einzelne Zeichencode angegeben werden; also bspw. 𣎴 anstatt ��
&-Zeichen: Obwohl HTML-Nutzerprogramme großzügig darüber hinwegsehen, sollte niemals ein &-Zeichen (Kaufmanns-Und) für sich allein im Text stehen. Besondere Beachtung gilt URIs, die Parameter enthalten. So sollte bspw. http://example.org/my-script.php?class=guest&name=user im Quelltext stehen, nicht http://example.org/my-script.php?class=guest&name=user.
Sagen Sie uns, was Sie denken (auf Englisch).
Abonnieren Sie unseren RSS-Feed.
Twitter (News auf der Startseite)
Übersetzung der englischen Version vom 2010-08-12. Letzte Änderung der übersetzten Version am 2011-01-26 GMT.
Suchen Sie nach qa-escapes im i18n-Blog, um alle Dokumentänderungen nachzuvollziehen.
Copyright © 2005-2011 W3C® (MIT, ERCIM, Keio, Beihang), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply. Your interactions with this site are in accordance with our public and Member privacy statements.