Situatie
Pentru ca diacriticele sa fie afisate corect pe site trebuie sa se tina cont de encoding-ul script-ului, a campurilor din baza de date, a documentului html, tipul de encoding prin care se transmit datele de la script la baza de date si de la script la browser.
Solutie
Pasi de urmat
Tipul de caractere al script-ului php
Multe editoare nu salveaza default scriptul ca UTF-8 ci encodat ca ANSI iar asta face ca diacriticele sa nu fie interpretate corect, nefacand parte din standardul ansi. Pentru a rezolva problema deschideti script-ul php in editorul Notepad si dati Save AS. Selectati UTF-8 ca tipul de encoding al fisierului si salvati. Din acest moment script-ul poate sa prelucreze diacriticele corect.
Tipul de encodare al campurilor din baza de date
In baza de date textele sunt salvate in anumite campuri din tabel. Acele campuri au de obicei setat tipul vachar, char, text sau ceva similar. Acest tip de date mai vine cu o setare ce se refera la encoding, default fiind tipul utf8_swedish_ci; modificati pentru general
Transferul datelor dintre script-ul php si baza de date
Urmatorul pas care trebuie facut este setarea modului in care vor fi trimise si primite informatiile din baza de date.Modul recomandat (functioneaza de la php5 in sus):
mysql_connect(parametrii de conectare); mysql_select_db(numele bazei de date); mysql_set_charset('utf8'); // stabilim comunicarea cu serverul sa se faca cu encoding-ul pentru setul de caractere utf8
Transferul datelor dintre scriptul php si browser
Pentru a trimite datele la browser fara a fi alterate in timpul transferului trebuie sa setam un header prin care specificam encoding-ul ca mai jos:
header("Content-type: text/html; charset=utf-8");
Desigur, precum se stie, toate headerele trebuie trimise primele la browser inaintea oricarui text, deci in scriptul php asta ar trebui sa fie printre primele linii (inaintea codului html)
Afisarea textului cu diacritice in pagina html
Ultimul pas care mai trebuie facut este setarea unui metatag in documentul html pentru a specifica browser-ului ca toate textele din acea pagina trebuie interpretate cu encoding-ul UTF8
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Leave A Comment?