Cum folosesc codurile de control (ie. the 'C0' U+0000-U+001F and 'C1' U+007F-U+009F ranges) in XML, XHTML si HTML?
Aplicatii adiacente creaza uneori coduri de control care incorporeaza date. De aceea este important uneori sa intelegem cum controalele sunt suportate in limbajele de marcare, cand aceste aplicatii sau datele lor migreaza spre web.
exista doua game ale Unicode Character Set care sunt atribuite ca si coduri de control.Standardul Unicode nu foloseste in mod special aceste controale si lasa definitiile lor in seama aplicatiei. Daca aplicatia nu specifica utilizarea lor, atunci ele sunt interpretate in conformitate cu semanticile ISO/IEC 6429. Cei mai multi dintre voi vor recunoaste multe din cele 6429 de controale: ACK, NAK, BEL, LF, FF, VT, CR, et al. Familia de standarde ISO 8859 si alte standarde de caractere isi bazeaza codurile de control pe standardul ISO 6429.
Codurile de control in segmentul U+0000-U+001F sunt cunoscute ca segmentul "C0" . Acest segment incepe cu controlul the NUL (Null) U+0000 . Codurile de control din segmentul U+0080-U+009F sunt cunoscute ca si segmentul "C1". DEL (Delete) U+007F este de asemenea un control si este adiacent cu inceputul segmentului C1.
Codurile de control ar trebui inlocuite cu marcaj corespunzator. Cum XML ofera o cale standard de a coda datele structurale, interpretarea codurilor de control altfel decat ca si marcaj ar anula avantajele folosirii XML. Folosirea codurilor de control in HTML si XHTML nu este niciodata adecvata, avand in vedere ca aceste limbaje de marcare reprezinta text, nu date. Singura ocazie cu care aceasta informatie ar trebui folosita este in rarul caz in care datele in format vechi care contin coduri de control nu pot fi curatate.
Daca datele nu sunt de tip text, ci binare, atunci ar fi mult mai practica codarea lor, de exemplu folosind base64 ca valori hexazecimale, pentru a fi sigur ca numai caracterele suportate sunt folosite in textul limbajului de marcare. (Si binenteles, decodarea textului cand fisierele sunt citite.) Notati ca XML Schema ofera tipuri de date pentru aceste codari.
Alta alternativa este stocarea datelor intr-un document extern si referinta catre el din documentul XML.
In XML 1.1, daca e nevoie sa reprezentam un cod de control, cea mai simpla alternativa explicita este sa folosim un NCR(referinta numerica de caracter). De exemplu, codul de control ESC (Escape) U+001B ar fi reprezentat fie ca  (hexadecimal) ori  (decimal) Referinta Numerica de Caracter.
Urmatorul tabel rezuma care limbaje de marcaj suporta codurile de control:
Controale | Segment | HTML 4 | XHTML 1.0 | XML 1.0 | XML 1.1 |
---|---|---|---|---|---|
C0,cu exceptia HT, LF, CR | U+0000 (NUL) | Ilegal | Ilegal | Ilegal | Ilegal |
U+0001-U+001F | Ilegal | Ilegal | Ilegal | NCR | |
HT, LF, CR | U+0009, U+000A, U+000D | Suportat | Suportat | Suportat | Suportat |
DEL + C1 | U+007F-U+009F | Ilegal | Ilegal | Suportat | NCR |
NEL | U+0085 | Ilegal | Ilegal | (permis) | Suportat |
Controlul NUL (Null) este ilegal si nu poate fi reprezentat de NCR sau codat direct in limbajul de marcare.
HTML, XHTML si XML 1.0 nu suporta segmentul C0 , cu exceptia HT (Tabulare Orizontala) U+0009, LF (Line Feed) U+000A, si CR (Carriage Return) U+000D. Segmentul C1 este suportat, i.e. puteti coda controalele direct sau sa le reprezentati ca NCRs(Referinte de Caracter Numeric).
XML 1.1 restrictioneaza segmentul C1, cu exceptia NEL U+0085 (Linia noua EBCDIC), ca si segmentul C0. Totusi, XML 1.1 permite controalelor sa fie reprezentate de NCRs(Referinte de Caracter Numeric).
Intrucat familia ISO 8859 rezerva segmentul C1 pentru controale,seturile de caractere Microsoft(e.g. 1250-1258) plaseaza caracterele in acest segment. Uneori autorii de continut folosesc gresit punctele de caracter de cod Microsoft in crearea de NCR in loc sa foloseasca valori Unicode. Datorita raspandirii acestei greseli, multe browsere afiseaza caracterele Microsoft in acest segment. Acesta este un comportament incorect si induce in eroare dezvoltatorul confirmand incorect valoarea gresita. Problema poate fi descoperita cand datele sunt folosite de o apliactie, sau cand un browser in conformitate cu standardele nu reuseste sa afiseze caracterele propuse spre afisare.
Mai multe detalii referitoare la segmentul C0 sunt disponibile in Unicode Code Chart: C0 Controls and Basic Latin
Mai multe detalii referitoare la segmentul C1 sunt disponibile in Unicode Code Chart: C1 Controls and Latin-1 Supplement