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: German Translation Team, Trusted Translations, Inc.

s_gotoW3cHome Internationalisierung
 

Bidirektionaler Leerzeichenverlust

Zielgruppe: Anwender, XHTML/HTML-Programmierer (die mit Editoren oder Scripting arbeiten), Skript-Entwickler (PHP, JSP, usw.), CSS-Programmierer, Schema-Entwickler (DTDs, XML Schema, RelaxNG, usw.), XSLT-Entwickler, Web-Projektmanager, und jeder der neu in der Internationalisierung ist, Hilfe zu Themen für deren Umsetzung auf der Website sucht.

Frage

Warum lässt mein Browser Leerzeichen zwischen lateinischem und arabischem/hebräischem Text aus?

Hintergrund

Leerzeichen zwischen lateinischem und arabischem/hebräischem Text können ausgelassen werden, wenn dem Text ein weißes Leerzeichen innerhalb eines Inline-Elements mit einem dir Attribut folgt.

Zum Beispiel verursacht der Code:

<p dir="rtl"> العالمية <span dir="ltr">(W3C) </span> تخلق قواعد </p>

ein Ergebnis, dass wie folgt aussieht, wobei der Pfeil die Position des fehlenden Leerzeichens anzeigt:

Abbildung des Ergebnisses mit fehlendem Leerzeichen links vom lateinischen Text.

Beachten Sie, dass dieser Effekt ebenfalls auftritt, wenn von rechts-nach-links verlaufender Text in eine Passage mit von links-nach-rechts verlaufendem Text eingebettet wird.

Antwort

Wenn der vorhergehende Abschnitt das Aussehen Ihres Codes beschreibt, ist die Lösung, alle Leerzeichen vor dem Ende-Tag des Inline-Elements oder dem dir Attribut (wenn angebracht) zu entfernen.

Zum Beispiel, ein Entfernen des Leerzeichens zwischen (W3C) und </span>:

<p dir="rtl"> العالمية <span dir="ltr">(W3C) </span> تخلق قواعد </p>

wird als Ergebnis wie folgt dargestellt:

Abbildung des Ergebnisses mit Leerzeichen an beiden Seiten des lateinischen Textes.

Beachten Sie auch, dass in diesem Beispiel das dir="ltr" Attribut im <span> Element um den Text (W3C) nicht benötigt wird, um die korrekte Anordnung zu erzeugen. Das Weglassen des Attributes oder des kompletten span-Elementes wird ebenfalls das Problem lösen.

Wie wird es dargestellt?

Die folgenden Kästchen zeigen Code-Beispiele gefolgt von einer Implementation des Codes auf dieser Seite, sodass Sie das Verhalten Ihrer aktuellen User-Agents testen können.

Code: <p dir="rtl"> العالمية <span dir="ltr">(W3C) </span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Code: <p dir="rtl"> العالمية <span dir="ltr">(W3C) </span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Code: <p dir="rtl"> العالمية <span>(W3C) </span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Code: <p dir="rtl"> العالمية <span>(W3C)</span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Code: <p dir="rtl"> العالمية (W3C) تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Übrigens

Lesen Sie diesen Abschnitt nur, wenn Sie die Details dazu kennenlernen möchten, warum dieses so eintritt.

Das erwartete Verhalten der Textanzeige ist nicht detailliert in den XHTML/HTML-Spezifikationen beschrieben, aber es wurde in den neuesten CSS-Spezifikationen beschrieben. Obwohl das Beispiel auf dieser Seite kein CSS verwendet, gelten die gleichen Prinzipien. Das nachfolgende Beispiel wurde aus dem CSS 2.1 Entwurf entnommen:

  1. Wenn 'white-space' auf 'normal', 'nowrap', oder 'pre-line' gesetzt wurde,
    1. wird jeder Tab (U+0009) in ein Leerzeichen umgewandelt (U+0020)
    2. jedes Leerzeichen (U+0020) das einem anderen Leerzeichen nachfolgt (U+0020) — auch wenn sich ein Leerzeichen vor der Inline befindet, wird dieses Leerzeichen, sofern es auch auf 'white-space' auf 'normal', 'nowrap' oder 'pre-line' — gesetzt wurde, entfernt.

Es wird folgendes Szenario gegeben (In welchem die Farben Leerzeichen U+0020 zur einfacheren Identifizierung darstellen):

<ltr>A <rtl> B </rtl> C</ltr>

Die Spezifikation besagt, dass das Leerzeichen nach A beibehalten wird, das Leerzeichen vor B entfernt wird, das Leerzeichen nach B beibehalten wird, das Leerzeichen vor C entfernt wird. Dieses wird dass gemäß dem Unicode Bidirektionalem Algorithmus gerendert und führt zu folgendem Ergebnis:

A  BC

Beachten Sie, dass sich zwischen A und B zwei Leerzeichen befinden! Die eingebetteten Ebenen können wie folgt ausgedrückt werden:

11221

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: German Translation Team, Trusted Translations, Inc..

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

Übersetzung der englischen Version vom 2003-11-06. Letzte Änderung der übersetzten Version am 2009-08-18 17:42 UTC.

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