HTML, XHTML, XML si Codurile de Control

Intrebare

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.

Raspuns

Cum folosim codurile de control

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.

Suport pentru codurile de control

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

Apropo

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.