Setarea parametrului HTTP set de caractere

Cand un server trimite un document catre un agent de utilizare (browser) acesta trimite informatiile despre formatul datelor din campul Content-type din antetul HTTP. Aceste informatie este exprimata cu ajutorul unei etichete de tip MIME. Acest articol reprezinta un punct de plecare pentru cei care trebuie sa seteze informatiile de codificare din antetul HTTP.

Pentru infromatii legate de cum sa declari codificarea caracterelor in paginile HTML,e necesar sa va informati din alte surse. Acest lucru e valabil si pentru verificarea informatiei legate de codificarea caracterelor trimisa intr-un antet HTTP.

Parametrul set de caracter

Documentele transmise prin HTTP, de genul textelor tiparite, ca de exemplu text/html, text/plain, pot trimite un charset parameter in antetul HTTP pentru a specifica tipul de codificare de caractere din document.

E foarte important sa etichetati intotdeauna cat mai explicit documentele Web. HTTP 1.1 spune ca codul standard charset este ISO-8859-1. Totusi exista foarte multe documente neetichetate construite in alte tipuri de codificari, asa ca browsere-le utilizeaza genul de codificare preferata de catre cititor atunci cand nu exista un parametru explicit de set de caractere.

Linia din antetul HTTP arata de obicei asa:

Content-Type: text/html; charset=utf-8

In teorie, orice forma de codificare a caracterelor care a fost inregistrata cu IANA poate fi folosita, dar nu exista nici un browser care sa fie capabil sa le inteleaga pe toate. Cu cat o forma de codificare a caracterelor e folosita la o scara mai larga, cu atat se maresc sansele ca un browser sa o recunoasca. . O codificare de tip Unicode ca de exemplu UTF-8 reprezinta o alegere potrivita avand in vedere mai multe motive.

Setarea serverului

Modul in care server-ul poate transmite cea mai potrivita informatie charset depinde de server. Veti avea nevoie de drepturile de administrare aferente pentru a putea modifica setarile serverului.

Apache. Aceasta operatiune se poate efectua cu ajutorul AddCharset (Apache 1.3.10 si versiuni mai recente) sau cu directive AddType pentru directoare si resurse individuale ( fisiere ). Folosind optiunea AddDefaultCharset (Apache 1.3.12 sau versiuni mai noi), exista posibilitatea sa setati optiunea charset by default pentru intreg serverul. Pentru mai multe informatii, cititi articolul despre Setarea setului de caractere in .htaccess.

Jigsaw. Foloseste un indexer in JigAdmin pentru a asocia extensiile cu seturile de caractere, sau pentru a seta setul de caractere direct la resource.

IIS 5 and 6. In zona Internet Services Manager, faceti click-dreapta pe "Default Web Site" ( ori pe site-ul pe care doriti sa-l configurati) sau mergeti la "Properties" => "HTTP Headers" => "File Types..." => "New Type...". Adaugati extensia pe care doriti s-o afisati, separat pentru fiecare extensie in parte; utilizatorii de IIS vor dori cel mai probabil sa se afiseze map .htm, .html,... Apoi, pentru Content type, adaugati "text/html;charset=utf-8" (fara ghilimele ; inlocuiti setul de caractere dorit cu utf-8; nu lasati spatii nicaieri pentru ca IIS ignora tot textul dupa spatii ). Pentru IIS 4, e posibil sa fie nevoie sa folositi "HTTP Headers" => "Creating a Custom HTTP Header" daca metoda anterioara nu functioneaza.

Scriptarea antetului

Antetul care se potriveste poate fi setat de asemenea in limbaje ce pot fi schimbate din server. De exemplu:

Perl. Configurati antetul corect inainte de va ocupa de orice alta parte a paginii. Dupa ce terminati cu ultimul antet, lasati un spatiu de doua randuri, e.g.:
print "Content-Type: text/html; charset=utf-8\n\n";

Python. Procedati la fel si pentru Perl ( cu diferenta ca, in acest caz, nu mai aveti nevoie de punct si virgula la final).

PHP. Folositi functia header() inainte de a crea orice tip de continut, ex.:
header('Content-type: text/html; charset=utf-8');

Java Servlets. Utilizati metoda setContentType pentru ServletResponse inainte de a obtine orice obiect (Stream sau Writer) folosit pentru output, e.g.:
resource.setContentType ("text/html;charset=utf-8");
Daca lucrati cu Writer, Servlet se ocupa automat de conversia din Java Strings in tipul de codificare selectat.

JSP. Utilizati instructiunea page ex.:
<%@ page contentType="text/html; charset=UTF-8" %>
Rezultatul din out.println() sau elementele de expresie (<%= object%>) este transformat automat in felul de codificare selectata. De asemenea, pagina insasi este interpretata ca fiind codificata in acest mod.

ASP si ASP.Net. ContentType si charset sunt configurate independent, si sunt metode pe obiectul de raspuns. Pentru a seta setul de caractere, puteti prooceda in acest mod, de ex.:
<%Response.charset="utf-8"%>
In ASP.Net, Configurarea Response.ContentEncoding va actiona atat la nivelul parametrului charset-ului din HTTP Content-Type cat si la nivelul tipului de codificare a documentului trimis. ( care, bineinteles, trebuie sa fie acelasi). Optiunea de default trebuie sa fie configurata in elementul globalization in Web.config (sau Machine.config, care e initial setat pentru UTF-8).