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

s_gotoW3cHome Internationalisierung
 

Verwendung von Zeichen-Escapes in Markup und CSS

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.

Frage

Wie verwendet man Zeichen-Escapes (Maskierungen) in Markup und CSS, wann sollte man sie verwenden und wann nicht?

Antwort

Welche Arten von Zeichen-Escapes können im Markup verwendet werden?

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.

Verschiedene Spezifikationen verwenden verschiedene Bezeichnungen für diese Konstrukte. Die HTML5-Spezifikationen bspw. bezeichnet Zeichen-Entity-Referenzen als named character references (benannte Zeichenreferenzen). In diesem Artikel haben wir solche Namen gewählt, von denen wir hoffen, dass sie für den Leser wiedererkennbar und verständlich sind, welche Variationen er bisher auch verwendet haben mag.

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.)

 
Eine hexadezimale numerische Zeichenreferenz. Alle numerischen Zeichenreferenzen beginnen mit &# und enden mit ;. Das x zeigt an, dass das Nachfolgende eine Hexadezimalzahl ist, die den Zeichencode eines Unicode-Zeichens angibt, d.h. die dem Zeichen in den Unicode-Code-Charts zugewiesene Nummer. Die Angabe ist nicht case-sensitiv (d.h. Groß-/Kleinschreibung spielt keine Rolle).
Beispiel: <p>Vive la France&#xA0;!</p>
&#160;
Eine dezimale numerische Zeichenreferenz. Hier wird eine Dezimalzahl benutzt, um denselben Zeichencode anzugeben.
Beispiel: <p>Vive la France&#160;!</p>
&nbsp;
Eine Zeichen-Entity-Referenz. Dies ist eine völlig andere Art von Escape. Zeichen-Entities werden durch die Auszeichnungssprache definiert. Das bedeutet bspw., dass in HTML nur bestimmte Zeichen (welche durch die HTML-Spezifikation definiert sind) als Entity-Referenz repräsentiert werden können (und dies sind nur sehr wenige Zeichen aus dem Unicode-Bereich). Zu beachten ist, dass die Bezeichner der Entities case-sensitiv sind: in HTML repräsentiert &Aacute; den Großbuchstaben Á, &aacute; hingegen den Kleinbuchstaben á.
Beispiel: <p>Vive la France&nbsp;!</p>
Einige Browser elauben es, das Semikolon am Ende einer numerischen Zeichenreferenz wegzulassen. Dies ist aber nicht empfehlenswert, denn es kann zu Interoperabilitäts­problemen führen. Wenn ein Semikolon am Ende steht, umgeht das auch das Problem, dass das Ende des Escapes nicht zu erkennen wäre, wenn das Escape im Text eingebettet ist.

Ein wichtiger Punkt ist, dass die Werte von numerischen Zeichenreferenzen (wie &#x20AC; oder &#8364; 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 &#x80; notieren. Zwar liegt das Euro-Zeichen in der Windows-1252-Codepage auf Position 80 (hexadezimal); aber &#x80; 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.)

CSS-Escapes

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:

Example: .\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:

Example: .\E9 dition { ... }
Anmerkung des Übersetzers: Ich halte es für empfehlenswert, immer ein Leerzeichen am Ende eines CSS-Escapes zu setzen (analog zu der Empfehlung, in HTML immer ein Semikolon am Ende einer Zeichenreferenz zu setzen). Dann muss man sich keine Gedanken darüber machen, ob man das Leerzeichen im betreffenden Fall weglassen könnte oder nicht.

Alternativ lann man eine 6-stellige Hexadezimalzahl verwenden, mit oder ohne Leerzeichen danach. Dies ist eine andere Möglichkeit, édition zu repräsentieren:.

Example: .\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).

Wann keine Escapes zu verwenden sind

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&#x115;j&#x161;&#xED; se n&#xE1;m jev&#xED; po&#x159;&#xE1;d&#xE1;n&#xED; tzv. Road Show prost&#x159;ednictv&#xED;m na&#x161;ich autorizovan&#xFD;ch dealer&#x16F; v &#x10C;ech&#xE1;ch a na Morav&#x11B;, kter&#xE9; prob&#x11B;hnou v pr&#x16F;b&#x11B;hu z&#xE1;&#x159;&#xED; a &#x159;&#xED;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 &aacute;) 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.

Wann Escapes zu verwenden sind

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 &quot; und das einfache Anführungszeichen (') durch &apos; repräsentiert werden – besonders in Attributwerten, wenn dasselbe Anführungszeichen, das den Attributwert umgibt, auch in diesem vorkommt. Zu beachten ist dabei jedoch, dass &apos; zwar in XML definiert ist, nicht aber in HTML 4.01, und manche Browser unterstützen &apos; in HTML nicht. Aus diesem Grund empfiehlt die XHTML-Spezifikation im Anhang C.16, stattdessen &#39; 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 &rlm; (oder der entsprechenden numerischen Referenz &#x200F;) 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 &nbsp; (oder &#xA0;) macht klar ersichtlich, wo solche geschützten Leerzeichen im Text vorkommen.

Verwendung von Escapes in style-Attributen

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&#xFC;beck">...</span>

Übrigens

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 &#xE1; 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. &#x233B4; anstatt &#xD84C;&#xDFB4;

&-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&amp;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.

Neue Ressourcen

News auf der Startseite

Twitter (News auf der Startseite)

‎@webi18n

Literaturhinweise

Autor: Richard Ishida, W3C. Übersetzer: Gunnar Bittersmann.

Valides XHTML 1.0!
Valides CSS!
Kodiert in UTF-8!

Übersetzung der englischen Version vom 2010-08-12. Letzte Änderung der übersetzten Version am 2011-01-26 UTC.

Suchen Sie nach qa-escapes im i18n-Blog, um alle Dokumentänderungen nachzuvollziehen.