Codificări de caractere în HTML - Character encodings in HTML

În timp ce Hypertext Markup Language ( HTML ) a fost utilizat din 1991, HTML 4.0 din decembrie 1997 a fost prima versiune standardizată în care caracterele internaționale au primit un tratament rezonabil de complet. Când un document HTML include caractere speciale în afara intervalului ASCII de șapte biți , merită luate în considerare două obiective: integritatea informațiilor și afișarea universală a browserului .

Specificarea codificării caracterelor documentului

Există mai multe moduri de a specifica codificarea caracterelor care este utilizată în document. Mai întâi, serverul web poate include codarea caracterelor sau " charset" în antetul Protocolului de transfer hipertext (HTTP) Content-Type, care ar arăta de obicei astfel:

Content-Type: text/html; charset=ISO-8859-4

Această metodă oferă serverului HTTP o modalitate convenabilă de a modifica codificarea documentului în funcție de negocierea conținutului ; anumite programe de server HTTP pot face acest lucru, de exemplu Apache cu modulul mod_charset_lite .

Pentru HTML este posibil să includeți aceste informații în interiorul headelementului din partea de sus a documentului:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

HTML5 permite, de asemenea, următoarea sintaxă să însemne exact același lucru:

<meta charset="utf-8">

Documentele XHTML au o a treia opțiune: să exprime codificarea caracterelor prin declarație XML , după cum urmează:

<?xml version="1.0" encoding="ISO-8859-1"?>

Deoarece codificarea caracterelor nu poate fi cunoscută până când această declarație nu este analizată, poate exista o problemă de a ști care codificare este utilizată pentru declarația însăși. Principiul principal este că declarația va fi codificată în ASCII pur și, prin urmare (dacă declarația se află în fișier), codificarea trebuie să fie o extensie ASCII . Pentru a permite codificările care nu sunt compatibile cu ASCII, browserele trebuie să poată analiza declarațiile din astfel de codificări. Exemple de astfel de codificări sunt UTF-16BE și UTF-16LE .

Algoritm de detectare a codificării

Începând cu HTML5 setul de caractere recomandat este UTF-8 . Un „algoritm de sniffing de codificare” este definit în specificație pentru a determina codificarea caracterelor documentului pe baza mai multor surse de intrare, inclusiv:

  1. Instrucțiuni explicite pentru utilizator
  2. O metaetichetă explicită în primii 1024 de octeți ai documentului
  3. O marcă de ordine de octeți în primii trei octeți ai documentului
  4. Tipul de conținut HTTP sau alte informații despre stratul de transport
  5. Analiza octeților documentului care caută secvențe specifice sau intervale de valori ale octeților și alte mecanisme de detectare provizorii.

Caracterele din afara intervalului ASCII imprimabil (32 - 126) apar de obicei incorect. Acest lucru prezintă puține probleme pentru utilizatorii care vorbesc limba engleză , dar alte limbi în mod regulat - în unele cazuri, întotdeauna - necesită caractere în afara acestui interval. În mediile de limbă chineză, japoneză și coreeană ( CJK ) în care există mai multe codificări multi-octeți diferite, se folosește adesea și detectarea automată. În cele din urmă, browserele permit de obicei utilizatorului să suprascrie manual eticheta incorectă a setului de caractere.

Este din ce în ce mai frecvent ca site-urile web multilingve și site-urile web în limbi non-occidentale să utilizeze UTF-8 , care permite utilizarea aceleiași codificări pentru toate limbile. UTF-16 sau UTF-32 , care pot fi folosite și pentru toate limbile, sunt mai puțin utilizate pentru că pot fi mai greu de manevrat în limbaje de programare care presupun o codificare superset ASCII orientată pe octeți și sunt mai puțin eficiente pentru textul cu o frecvență mare de caractere ASCII, care este de obicei cazul documentelor HTML.

Vizualizarea cu succes a unei pagini nu este neapărat un indiciu că codificarea acesteia este specificată corect. Dacă creatorul și cititorul paginii presupun ambele coduri de caractere specifice platformei, iar serverul nu trimite nicio informație de identificare, atunci cititorul va vedea totuși pagina așa cum intenționează creatorul, dar alți cititori pe platforme diferite sau cu limbi native diferite nu va vedea pagina conform intenției.

Codificări permise

WHATWG standard de codare, referite de standardele HTML recente (actualul WHATWG HTML Nivelul de viață, precum și anterior concurente W3C HTML 5.0 și 5.1) specifică o listă de codificări care trebuie să sprijine browsere. Standardele HTML interzic acceptarea altor codificări. Standardul de codificare prevede în plus că noile formate, noi protocoale (chiar și atunci când sunt utilizate formate existente) și autorii noilor documente trebuie să utilizeze UTF-8 exclusiv.

Pe lângă UTF-8, următoarele codificări sunt listate explicit în standardul HTML în sine, cu referire la standardul de codificare:

Următoarele codificări suplimentare sunt listate în standardul de codificare și, prin urmare, este necesară asistență pentru acestea:

Următoarele codificări sunt listate ca exemple explicite de codificări interzise:

Standardul definește, de asemenea, un decodor „de înlocuire”, care mapează tot conținutul etichetat ca anumite codificări la caracterul de înlocuire ( ), refuzând deloc să îl proceseze. Aceasta este destinată prevenirii atacurilor (de exemplu, scripturi de pe site-uri încrucișate ) care pot exploata o diferență între client și server în ceea ce privește codurile acceptate pentru a masca conținutul rău intenționat. Deși aceeași preocupare de securitate se aplică ISO-2022-JP și UTF-16 , care permit, de asemenea, secvențelor de octeți ASCII să fie interpretate diferit, această abordare nu a fost văzută ca fiind fezabilă pentru ei, deoarece acestea sunt comparativ mai frecvent utilizate în conținutul implementat. Următoarele codificări primesc acest tratament:

Referințe de caracter

În plus față de codificarea caracterelor native, caracterele pot fi codificate și ca referințe de caractere , care pot fi referințe numerice de caractere ( zecimale sau hexazecimale ) sau referințe de entități de caractere . Referințele entităților de caractere sunt, de asemenea, denumite uneori entități denumite sau entități HTML pentru HTML. Utilizarea HTML de referințe de caractere derivă din SGML .

Referințe de caractere HTML

O referință de caractere numerice în HTML se referă la un caracter în funcție de setul de caractere universal / punctul de cod Unicode și folosește formatul

&#nnnn;

sau

&#xhhhh;

unde nnnn este punctul de cod în formă zecimală , iar hhhh este punctul de cod în formă hexazecimală . X trebuie să fie literă mică în documentele XML. Nnnn sau hhhh poate fi orice număr de cifre și poate zerouri. Hhhh litere mari și litere mici se pot amesteca, deși litere mari este stilul obișnuit.

Nu toate browserele web sau clienții de e-mail utilizați de receptorii de documente HTML sau editorii de text folosiți de autorii de documente HTML nu vor putea reda toate caracterele HTML. Cele mai multe programe moderne sunt capabile să afișeze majoritatea sau toate caracterele pentru limba utilizatorului și va desena o casetă sau alt indicator clar pentru caracterele pe care nu le pot reda.

Pentru codurile de la 0 la 127, setul original ASCII pe 7 biți , majoritatea acestor caractere pot fi utilizate fără o referință de caracter. Codurile de la 160 la 255 pot fi create folosind nume de entități de caractere . Numai câteva coduri cu numere mai mari pot fi create folosind nume de entități, dar toate pot fi create prin referința la caracterul numărului zecimal.

Referințele entităților de caractere pot avea și formatul în care numele este un șir alfanumeric sensibil la majuscule. De exemplu, „λ” poate fi codat și ca într-un document HTML. Referințele entitate caracter , , și sunt predefinite în HTML și SGML, pentru că , , și sunt deja folosite pentru a delimita markup. Aceasta nu include în special entitatea XML (') înainte de HTML5 . Pentru o listă a tuturor referințelor entităților de caractere HTML denumite împreună cu versiunile în care au fost introduse, consultați Lista referințelor entității de caractere XML și HTML . &name;&lambda;&lt;&gt;&quot;&amp;<>"&&apos;

Utilizarea inutilă a referințelor de caractere HTML poate reduce semnificativ lizibilitatea HTML. Dacă codificarea caracterelor pentru o pagină web este aleasă corespunzător, atunci referințele de caractere HTML sunt de obicei necesare numai pentru marcarea caracterelor de delimitare așa cum s-a menționat mai sus și pentru câteva caractere speciale (sau deloc dacă este utilizată o codificare Unicode nativă precum UTF-8 ). Scăparea incorectă a entității HTML poate, de asemenea, să deschidă vulnerabilități de securitate pentru atacuri de injecție, cum ar fi scripturi între site-uri . Dacă atributele HTML sunt lăsate necotate, anumite caractere, cel mai important spațiul alb , cum ar fi spațiul și fila, trebuie să fie evadate folosind entități. Alte limbaje legate de HTML au propriile metode de scăpare a caracterelor.

Referințe de caracter XML

Spre deosebire de HTML-ul tradițional cu gama sa largă de referințe de entitate de caractere, în XML există doar cinci referințe de entități de caractere predefinite. Acestea sunt utilizate pentru a scăpa de caractere care sunt sensibile la marcaje în anumite contexte:

  • &amp; → & ( ampersand , U + 0026)
  • &lt; → <(semn mai mic decât, U + 003C)
  • &gt; →> (semn mai mare decât, U + 003E)
  • &quot; → "(ghilimele, U + 0022)
  • &apos; → '(apostrof, U + 0027)

Toate celelalte referințe de entitate de caracter trebuie definite înainte de a putea fi utilizate. De exemplu, utilizarea lui &eacute;(care dă é, minusculă latină E cu accent acut, U + 00E9 în Unicode) într-un document XML va genera o eroare, cu excepția cazului în care entitatea a fost deja definită. XML necesită, de asemenea, ca xreferințele numerice hexazecimale să fie cu litere mici: de exemplu, &#xA1bmai degrabă decât &#XA1b. XHTML , care este o aplicație XML, acceptă setul de entități HTML, împreună cu entitățile predefinite XML.

Vezi si

Referințe

linkuri externe