Jak radzić sobie z kodami kontroli ( np.:zakres 'C0' U+0000-U+001F i 'C1' U+007F-U+009F) w XML, XHTML i HTML?
Starsze programy czasami tworzą dane z zawiartymi już kodami kontroli. Z tego też powodu może okazać się istotnym zrozumienie jak kontrole są wspierane przez języki znaczników kiedy takie dane lub aplikacje są importowane do internetu.
Istnieją dwa zakresy znaków Unicode, które funkcjonują jako kontrole. Standard Unicode nie ma żadnego konkretnego zastosowania dla tych kontroli, pozostawiając ich definicje aplikacjom. Jeśli aplikacje nie określają ich konkretnego zastosowania, wtedy interpretowane są one według semantyki ISO/IEC 6429. Większość ludzi rozpoznaje kotrole 6429: ACK, NAK, BEL, LF, FF, VT, CR, etc. ISO 8859 i inne standardy opierają swoje kody kontroli o standard ISO 6429.
Kody kontroli w zakresie U+0000-U+001F są znane jako zakres "C0". Zakres ten zaczyna się od kontroli NUL (Null) U+0000. Kody kontroli w zakresie U+0080-U+009F znane są jako zakres "C1". DEL (Delete) U+007F jest także kontrolą i znajduje się na początku zasięgu C1.
Kody kontroli powinny być zastąpione odpowiednimi znacznikami. Ponieważ XML zapewnia standardowy sposób kodowania danych strukturalnych, używanie kodów kontroli innych niż znaczników negatywnie wpłynęłoby na korzyści płynące z zastosowania XML. Używanie kodów kontroli w HTML oraz XHTML nie jest zalecane, ponieważ owe języki znaczników są stosowane do prezentacji tekstu a nie danych. Jedynym przypadkiem zastosowania jest sytuacja, w której zastosowano dane zawierające kody kontroli, których nie można usunąć.
Jeśli dane nie są tekstowe, a binarne, bardziej praktycznym może okazać się zakodowanie ich, np. używając base64 lub jako wartości w systemie szesnastkowym aby zastosować jedynie znaki, które są wspierane przez język znaczników. Pamiętaj, że Schemat XML dostarcza typów danych dla takich kodowań.
Następną alternatywą jest przechowywanie danych w oddzielnym dokumencie oraz wskazanie takiego dokumentu w dokumencie XML.
W XML 1.1 (które nadal jest na etapie kandydata do rekomendacji) jeśli chce się przedstawić kod kontroli w wyraźny sposób, najprostszą alternatywą jest używanie NCR (numeric character reference). Na przykład, kod kontroli ESC (Escape) U+001B będzie przedstawiony przez  (hexadecimal) lub  (decimal) Numeric Character References.
Poniższa tabela podsumowuje które języki znaczników wspierają kody kontroli:
Kontrole | Zasięg | HTML 4 | XHTML 1.0 | XML 1.0 | XML 1.1 |
---|---|---|---|---|---|
C0, except HT, LF, CR | U+0000 (NUL) | Brak obsługi | Brak obsługi | Brak obsługi | Brak obsługi |
U+0001-U+001F | Brak obsługi | Brak obsługi | Brak obsługi | NCR | |
HT, LF, CR | U+0009, U+000A, U+000D | Z obsługą | Z obsługą | Z obsługą | Z obsługą |
DEL + C1 | U+007F-U+009F | Brak obsługi | Brak obsługi | Z obsługą | NCR |
NEL | U+0085 | Brak obsługi | Brak obsługi | (dozwolone) | Z obsługą |
Kontrola NUL (Null) nie ma wsparcia i nie może byc reprezentowana przez NCR lub kodowana bezpośrednio w języki znaczników.
HTML, XHTML oraz XML 1.0 nie wspierają zasięgu C0 z wyjątkiem HT (Horizontal Tabulation) U+0009, LF (Line Feed) U+000A oraz CR (Carriage Return) U+000D. Zasięg C1 ma wsparcie np.: można kodować kontrole bezpośrednio lub przedstawiać je jako NCRs (Numeric Character References).
XML 1.1 ogranicza zasięg C1 z wyjątkiem NEL U+0085 (the EBCDIC New line) oraz zasięg C0. Jednakże, XML 1.1 zezwala na reprezentacje kontroli poprzez NCRs (Numeric Character References).
Podczas gdy rodzina ISO 8859 rezerwuje zasięg C1 dla kontroli, zbiory znaków Microsoftu (np.:. 1250-1258) umieszczają znaki w tym zasięgu. Czasami autorzy stron używają przez pomyłkę znaków Microsoftu przy tworzeniu NCRs zamiast wartości Unicode. Z powodu szerokiego ropowszechnienia tego błędu wiele przeglądarek wyświetla znaki Microsoftu w tym zasięgu. Jest to nieprawidłowe zachowanie, które utwierdza autorów co do słuszności niewłaściwej wartości. Problem ten może się ujawnić kiedy jakaś aplikacja przetworzy dane jako kontrole a nie jako niewłaściwe znaki lub kiedy przeglądarka przestrzegająca standardów nie wyświetli ich.
Więcej szczegółów na temat zasięgu C0: Unicode Code Chart: C0 Controls and Basic Latin
Więcej szczegółów na temat zasięgu C1: Unicode Code Chart: C1 Controls and Latin-1 Supplement
Dokument Unicode in XML and other Markup Languages zawiera wytyczne dotyczące zastosowania standardu Unicode w połaczeniu z językami znaczników np.: XML.