Znaková sada UTF-8

Vcelku dlouho jsem se trápil se správným nastavením znakové sady UTF-8 při používání databáze. Pokud si chcete trápení ulehčit, zde je článek jak kominukaci s databází v UTF-8 nastavit.

Předesílám, že jde o článek značně historický, a změna znakové sady by se efektněji nyní řešila jinak.

Mým největším problémem bylo, že jsem znakové sady zkoušel měnit za chodu. Ono to také jde, ale vyžaduje to určitý přísný postup, který uvádím níže. Nechci se pouštět do rozebírání, co je znaková sada UTF-8, na to je nejlepší projít manuál, kapitolu o znakové sadě UTF-8. Spíše uvedu, jaké používám nastavení na svých stránkách.

Webové stránky píši ve volně šířeném PSPadu – ve znakové sadě UTF-8 (Formát/UTF-8). Kódování stránek v XHTML je nastaveno takto:

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

Po tuto část je to asi jasné. Pokud pracujete s PHP scripty a připojujete se do databáze, z které stahujete data, může se vám stát, že se vám znaky nezobrazí korektně. Mně se to tak stávalo, protože jsem nesprávně nastavoval znakové sady v MySQL, resp. v phpMyAdminu.

Jak co nastavit

Na samém začátku kódu každé stránky definuji kódování a jazyk stránky:

  • mb_language("uni");
  • mb_internal_encoding("UTF-8");

Tímto zajistím, že například data z formuláře budou mít správné kódování. Mnoho serverů má totiž nastavenu implicitně sadu ISO 8859-2, takže odeslaná data by nebyla s diakritikou. Poté se připojím do databáze a hned následuje příkaz nastavení sady UTF-8.

  • $SQLConnect = @MySQL_Connect(DB_HOST,DB_USER,DB_PASSWORD);
  • $SQLSelectDb = @MySQL_Select_DB(DB_DATABASE);
  • $SQLSetname = @MySQL_Query("SET NAMES UTF8");

V MySQL, resp. v phpMyAdminovi, nastavím znakovou sadu tabulky UTF-8 a porovnání u textových polí utf8_czech_ci nebo utf8_general_ci.

Mno, a je to!

Dodatečná změna znakové sady

  • Nejdříve všechny soubory s kódy otevřu s jejich nativní znakovou sadou, převedu do UTF-8 a uložím.
  • Nezapomeňte nastavit kódování stránky na <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  • Stáhnu celou databázi a v editoru nechám hromadně přepsat kódování UTF-8 a porovnání utf8_czech_ci
  • Databázi na serveru smažu a naimportuji znovu

Vše by mělo běžet jak má v UTF-8.

Martin Ševčík, 4. 3. 2006
přečteno: 13410/13093×

Bookmark and Share

Vložit komentář Vložit komentář