Se poate sa fi intampinat dorinta/nevoia de a include in paginile voastre suport pentru alte limbi in afara de romana. In acest caz apare problema afisarii caracterelor speciale, diacriticelor ce sa mai vorbim de alfabetul chirilic sau de limbile arabe/asiatice, etc.
Pentru majoritatea limbilor latine, problema este rezolvata din start, datorita standardului ISO 8859-1 care este standardul implicit utilizat de majoritatea editoarelor HTML.
Definirea tipului de caractere ce urmeaza a fi afisat in pagina HTML se face prin specificarea unui set de caractere (charset) pentru atributul Content-Type al unui tag meta:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
Standardul ISO 8859-1 acopera Alfabetul Latin Numarul 1 care contine 191 caractere din sistemul de scriere latin. Printre limbile europene mai raspandite, acoperite de acest standard, se numara: Engleza, Germana, Italiana, Spaniola, Portugheza, Daneza, Suedeza, Norvegiana, etc.
Alfabetul Latin Numarul 1 insa, nu contine toate caracterele aferente limbii romane (adica ? si ?). Pentru a afisa in pagina HTML texte cu suport 100% pentru caracterele romanesti cu diacritice, este nevoie sa definiti setul de caractere:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
Acest standard poarta si denumirea de Alfabetul Latin Numarul 2 (sau Latin-2) si este o versiune extinsa a lui ISO 8859-1, care ofera suport pentru toate caracterele acestuia, si cateva noi in plus.
Urmatoarele alfabeturi sunt suportate 100% de acest standard: Romana, Maghiara, Sarba, Slovena, Slovaca, Ceha, Poloneza, si altele.
In cazul in care seturile de caractere de mai sus nu va acopera toate caracterele de care aveti nevoie la afisarea in pagina HTML, ar trebui sa va indreptati privirea spre UTF-8.
UTF-8 este o metoda de codare a caracterelor cu lungime variabila, si foloseste 1 pana la 4 octeti pentru reprezentarea unui caracter:
Definirea unui set de caractere codat in UTF-8 pentru o pagina HTML se face in felul urmator:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Ca totul sa functioneze cum trebuie, este necesar ca pagina HTML sa fie si ea la randul ei codata in UTF-8. Acest lucru se seteaza din editorul de text pe care il folositi la crearea paginii HTML. Unele editoare moderne, au setat implicit modul de codare in UTF-8. Pentru editoare mai vechi, este nevoie sa cautati prin setari (Options, Properties) optiuni de codare a paginilor care le editati (Page/Document Enconding), sau alte la editoare puteti specifica tipul de codare in momentul in care salvati (Save/Save As).
In cazul in care editorul nu suporta fisiere codate UTF-8, sau nu gasiti setarea respectiva, puteti utiliza editorul Eclipse care este Open-Source.
In cazul in care lucrati cu limbaje server-side (PHP, ASP, JSP, CF) si aveti de a face cu suport pentru mai multe limbi intr-un site web, textele ce urmeaza sa fie afisate in site probabil le pastrati separat de site, unde le definiti in functie de limba si doar le includeti in fisierele site-ului.
In acest caz, pasul de mai sus (definirea setului de caractere) este necesar, dar pe langa asta, fisierele PE CARE pe includeti trebuie sa fie codate in UTF-8, nu neaparat si fisierul IN CARE le includeti.
Asadar, fisierele unde pastrati informatia trebuie sa fie codate/salvate in UTF-8, si fisierele care le afisati in browser, trebuie sa aibe setat setul de caractere pentru UTF-8.
In loc de tagul meta pentru definirea setului de caractere, in PHP puteti folosi si urmatoarea metoda:
<?php header("Content-type: text/html; charset=utf-8");?>
Mergand mai departe, si in cazul bazelor de date, trebuie specificat suportul pentru UTF-8. In primul rand, este nevoie sa setati baza de date ca avand continut UTF-8. MySQL, incepand de la versiunea 4.1, oferta suport puternic pentru Unicode, si in consecinta si pentru UTF-8.
De obicei, MySQL lucreaza in mod implicit cu setul de caractere (denumit COLLATION in MySQL) latin1_swedish_ci pe care va trebui sa-l inlocuiti cu utf8_general_ci.
Acest lucru il puteti face fie printr-o interfata MySQL (phpMyAdmin, de exemplu, care este un script PHP ce face interfatarea cu serverul de MySQL) fie prin interogari:
Pentru modificarea bazei de date:
ALTER DATABASE `database_name` CHARACTER SET utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT COLLATE utf8_general_ci;
Pentru modificarea unei tabele:
ALTER TABLE `table_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Pentru modificarea din phpMyAdmin, dupa selectia bazei de date din selectul din stanga, click pe Operations din meniul de sus. Ultima optiune este Collation, care trebuie setat pe utf8_general_ci. Click pe Structure, si se vor afisa toate tabelele. Campul Collation ne spune ce set de caractere este definit. Daca nu este setat pe utf8_general_ci, trebuie sa o facem manual. Selectam o tabela, Click pe Operations, si setam Collation-ul corespunzator. Din pacate nu se poate aceasta modificare pe mai multe tabele deodata.
Dupa ce am setat baza de date si toate tabelele, trebuie sa setam si toate campurile de text care pot contine caractere UTF-8, si anume campurile de tip VARCHAR, CHAR, TEXT, TINYTEXT, MEDIUMTEXT, LONGTEXT, BLOB, TINYBLOB, MENIUMBLOB, LONGBLOB.
In cazul in care este vorba de o sectiune de administrare a unui site folosind formulare HTML si scripturi PHP care introduc informatii intr-o baza de date MySQL este nevoie ca si toata transmisia de date intre PHP si MySQL sa se efectueze conform coding-ului UTF-8.
Asadar, este nevoie sa adaugati urmatoarele linii in .htaccess:
# Set httpd charset to utf-8
AddDefaultCharset On
AddDefaultCharset utf-8
# Set php charset to utf-8 and setup mbstring
# Note: mbstring might not exist on all hosts
php_value default_charset utf-8
php_value mbstring.internal_encoding utf-8
php_value mbstring.func_overload 7
Pentru cei ce nu stiu, .htaccess este un fisier care trebuie sa stea in root-ul site-ului, care trebuie sa se numeasca exact asa cum se vede scris adica [.htaccess], fara extensie. Acest fisier poate contine comenzi de configurare a serverului specifice fiecarui site in parte.
Deasemenea, toate fisierele care contin formulare, in care se pot introduce texte in UTF-8, trebuie deasemenea sa aibe setate Content-Type-ul aferent:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
In acest mod aveti un sistem complet de colectare de date, transmisie de date, stocare de date si afisare de date pentru orice tip de caractere uzuale in format UTF-8.
1.
Am si eu o intrebare. Dar nu-i gasesc raspuns
am
1. fisier encodare UTF-8
2. la html
3 in mysql este utf8
si totusi nu-mi arata cum trebuie ,dar in phpmyadmin lucreaza cum trebuie
2.
Functioneaza corect, dar am o intrebare legata de forma url-ului.
De ex., am un catalog cu firme, totul functioneaza corect cu diacritice. Legatura de la numele firmei ma trimite intr-o alta pagina cu datele si ofertele firmei respective. Daca numele firmei a fost scris cu diacritice in formular, legatura va fi afisata cu diacritice.
Am vazut cazuri cand legaturile aveau afisate codurile hexa in locul diacriticelor sau alte cazuri cand se facea transormarea diacriticelor din legatura in caractere latine.
Va fi corect indexat site-ul de catre motoarele de cautare daca in url apare numele cu diacritice?
3.
Ce limbi nu sunt suportate de UTF-8?
4.
La o prima citire a articolului il consider foarte bun pentru ca trateaza toate aspectele referitoare la charset si merita invatat sau dac nu adaugat la lista de bookmarkuri.
5.
Consider articolul foarte bun si explicit. Am rezolvat problema afisarii diacriticelor. Multumesc.
6.
Modificat liniile de cod pentru .htaccess:
Initial am trecut niste valori care le-am gasit pe web, pentru ca nu eram la lucru:
AddCharset UTF-8 .utf8
AddDefaultCharset UTF-8
Acuma am ajuns la lucru si am observat ca noi folosim putin altceva:
AddDefaultCharset On
AddDefaultCharset utf-8
php_value default_charset utf-8
php_value mbstring.internal_encoding utf-8
php_value mbstring.func_overload 7
7.
daca nu am cautat o solutie la asta de mi-a venit acru problema majora vine la unele fisiere pe care pur si simplu php nu le vede gen caractere maghiare "o" cu 2 liniute deasupra si altele, deci asta la introducere in db, editare si asa mai departe o sa incerc si db-ul si tabelele setate cum ai facut tu, chiar sunt curios.