HTML, XHTML, XML und Steuerzeichen

Frage

Wie handhabt man Steuerzeichen – zum Beispiel die »C0«- (U+0000-U+001F) und »C1«-Bereiche (U+007F-U+009F) – in HTML, XHTML und XML?

Alte Anwendungen erzeugen manchmal Daten, die Steuerzeichen beinhalten. Es kann deshalb wichtig sein, zu verstehen, wie diese Zeichen in Markup-Sprachen unterstützt werden, wenn solche Anwendungen oder ihre Daten ins Web migriert werden.

Es gibt zwei Bereiche des Unicode Character Sets, denen Steuerzeichen zugewiesen sind. Der Unicode-Standard macht keinen besonderen Gebrauch von diesen Steuerelementen und überlässt ihre Definition der jeweiligen Applikation. Wenn eine Anwendung den Gebrauch der Steuerzeichen nicht spezifiziert, sind sie entsprechend ISO/IEC 6429 zu interpretieren. Viele von Ihnen werden einige der 6429-Codes kennen: ACK, NAK, BEL, LF, FF, VT, CR etc. Die ISO-8859-Familie und andere Zeichenstandards fußen ihre Steuerzeichen auf dem ISO-6429-Standard.

Die Steuerzeichen im Bereich U+0000-U+001F sind als »C0«-Bereich bekannt. Dieser Wertebereich beginnt mit dem NUL-Steuerelement U+0000 (Null). Die Steuerzeichen im Bereich U+0080-U+009F sind als »C1«-Bereich bekannt. DEL U+007F (Delete) ist ebenfalls ein Steuerelement, und es grenzt an den Anfang des C1-Bereichs an.

Antwort

Steuerzeichen handhaben

Steuerzeichen sollten durch passendes Markup ersetzt werden. Da XML einen Standardweg bietet, strukturierte Daten zu kodieren, würde die Angabe von Steuerzeichen in anderer Form als Markup die Vorteile von XML zunichte machen. Der Gebrauch von Steuerzeichen in HTML und XHTML ist nie zu empfehlen, da diese Markup-Sprachen dafür da sind, Text darzustellen, keine Daten. Die folgenden Informationen sollten nur in dem seltenen Fall gebraucht werden, in dem alte Daten, die Steuerzeichen beinhalten, nicht bereinigt werden können.

Wenn Daten nicht rein textlich, sondern binär sind, kann es geeigneter sein, sie zu kodieren, zum Beispiel über Base64 oder hexadezimale Werte, um sicherzustellen, dass im Markup-Text nur unterstützte Zeichen verwendet werden. (Und um diese selbstverständlich zu dekodieren, wenn die Dateien gelesen werden.) Beachten Sie, dass XML Schema Datentypen für diese Kodierungen bietet.

Eine weitere Alternative ist, die Daten in einem externen Dokument zu speichern und aus einem XML-Dokument zu referenzieren.

In XML 1.1 stellt der Gebrauch von NCRs (Numeric Character References) die einfachste Lösung dar, wenn Sie Steuerzeichen explizit angeben wollen. So würde das Steuerelement ESC U+001B (Escape) beispielsweise entweder durch die NCRs  (hexadezimal) oder  (dezimal) wiedergegeben werden.

Unterstützung von Steuerzeichen

Die folgende Tabelle fasst zusammen, welche Markup-Sprachen Steuerzeichen unterstützen:

Steuerzeichen Bereich HTML 4 XHTML 1.0 XML 1.0 XML 1.1
C0 (außer HT, LF, CR) U+0000 (NUL) unzulässig unzulässig unzulässig unzulässig
U+0001-U+001F unzulässig unzulässig unzulässig NCR
HT, LF, CR U+0009, U+000A, U+000D unterstützt unterstützt unterstützt unterstützt
DEL + C1 U+007F-U+009F unzulässig unzulässig unterstützt NCR
NEL U+0085 unzulässig unzulässig (zulässig) unterstützt

Übrigens

Auch wenn die ISO-8859-Familie den C1-Bereich für Steuerelemente reserviert, sehen Microsoft-Zeichensätze (zum Beispiel 1250-1258) in diesen Bereichen Zeichen vor. Manchmal verwenden Autoren irrtümlicherweise die Microsoft-Codepunkte, um NCRs zu kreieren, anstelle von Unicode-Werten. Viele Browser stellen aufgrund der Verbreitung dieses Fehlers in diesem Bereich die Microsoft-Zeichen dar. Diese Verhaltensweise ist jedoch nicht korrekt und führt Entwickler zudem in die Irre, indem sie den falschen Wert irrtümlicherweise bestätigt. Das Problem mag eventuell entdeckt werden, wenn die Daten von irgendeiner Anwendung als fehlerhafte Zeichen und nicht als Steuerelemente behandelt werden, oder wenn ein standardkonformer Browser die Zeichen nicht wie beabsichtigt darstellen kann.