HTML, XHTML, XML i kody kontroli

Pytania

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.

Odpowiedź

Obsługiwanie kodów kontroli

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.

Wsparcie dla kodów kontroli

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ą

Dodatkowe informacje

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.