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
 

FAQ: Verwendung von Zeichen-Entity-Referenzen und numerischen Zeichenreferenzen

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

Was sind Zeichen-Entity-Referenzen und numerische Zeichenreferenzen für Escapes; und wann sind sie zu verwenden?

Antwort

Was sind Zeichen-Entity-Referenzen und numerische Zeichenreferenzen?

Jedes Unicode-Zeichen lässt sich in XML oder (X)HTML durch ein Zeichen-Escape darstellen; in diesem kommen dann ausschließlich ASCII-Zeichen vor. Numerische Zeichenreferenzen und Zeichen-Entity-Referenzen sind Arten von Zeichen-Escapes. Das geschützte Leerzeichen (U+00A0 NO-BREAK SPACE) bspw. lässt sich folgendermaßen repräsentieren:

Verschiedene Spezifikationen verwenden verschiedene Bezeichnungen für diese Konstrukte. 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.
 
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>
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.

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

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.

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. Aus diesem Grund empfiehlt die XHTML-Spezifikation [im Anhang C.16], stattdessen &#39; zu verwenden, wenn der Text an ein Nutzerprogramm (Browser) geschickt wird, der diesen als HTML verarbeitet.

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.

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

Obwohl die meisten Browser hexadezimale Zeichenreferenzen kennen, tun dies einige veraltete Browser wie Netscape 4 nicht. Das ist zu beachten, wenn man auf solche Browser noch Rücksicht nehmen muss. [Solche veralteten Browser sollten heutzutage keine Rolle mehr spielen. – Anm. d. Übers.]

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

Literaturhinweise

Spezifikationen:

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

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

Übersetzung der englischen Version vom 2006-10-22. Letzte Änderung der übersetzten Version am 2008-04-07 11:51 GMT

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