Kodowanie stron html i aplikacji php - brak polskich liter?

16 12 2008

Często zdarza się sytuacja, że w pewnym momencie zamiast polskich liter na stronie lub projekcie mamy słynne krzaki:/. lub mamy  źle zakodowaną baze danych np: na stronie internetowej wszystki polskie litery wyswietlają się prawidłowo a już przeglądając baze danych za pomocą np: phpMyAdmin mamy w bazie zamiast polskich znaków krzaki. Czasami taka sytuacja może trwać przez cały okres istnienia projektu gdyż przez ten czas nie musieliśmy zmieniać danych bezpośrednio na bazie przy pomocy phpMyAdmina.

phpMyAdmin -  bardzo przydatne narzędzie każdej osoby co miała kontakt z bazą MySql, można wręcz powiedzieć, że znajomość tej aplikacji jest obowiązkowa!!!

Nasze projekty możemy zawsze zakodować na trzy sposoby:

  • ISO - 8859-2
  • UTF-8
  • WIN - 1250

Ja osobiście preferuje UTF8 - z doświadczenia najmniej problemu mi przysparza to kodowanie, a często kożystając z CMS Joomla bez problemu zawsze znalazłem wersje UTF lub szybko sam sobie ją zrobiłem.

Na początku warto zrozumieć jedną rzecz:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />

Nigdy nie posługujemy się do zmiany kodowania tylko deklaracją kodowania ustawioną w sekcji HEAD kodu HTML. Plik musi być fizycznie zapisany w docelowym kodowaniu, dlatego osobiście gorąco polecam bezpłatny edytor PSPad a odrazam używanie Notepad++, a dlaczego?

Przykład 1.

Chcę zmienić kodowanie komponentu do Joomli który jest w wersji np: ISO a potrzebuje UTF. Wystarczy zmienić tylko kodowanie pliku językowego (polish.php) ,

  1. otwieram edytor PSPad,
  2. klikam w menu górnym zakładke Format,
  3. wybieram kodowanie ISO (taki mam plik),
  4. otwieram plik przeciągając go do PSPad
  5. Klikam znowu zakładkę Format i wybieram interesujące mnie kodowanie UTF-8
  6. Zapisuje plik
  7. Koniec

Plik został zapisany w kodowaniu UTF-8, można zrobić kilka wersji kodowych i otworzyć za pomocą np: Notepad++, nie trudno będzie zauważyć co się stało z polskimi literami.

 A więc co warto robić aby ustrzeć się problemu braku polskich liter na stronach i projektach:

  • zapisywać pliki w takim kodowaniu jaki jest ustawiony w nagłówkach HTML (lub odwrotnie)
  • tworząc bazę danych ustawiamy jej odpowiednie kodowanie.
  • po nawiązaniu połączenia z baza danych warto wywołać jedno polecenie SQL do bazy $query = 'SET NAMES latin2'
  • Ustawić kodowanie PHP np: poprzez dodanie w pierwszej linii naszego projektu PHP linii: ini_set('default_charset', 'UTF-8');
  • Ustawić kodowanie PHP np: poprzez ustawienie w pliku .httacces php_value default_charset UTF-8

 Oczywiście nie musimy stosować się do tych zaleceń gdyż w większości przypadków będzie wszystko działać bez problemu, jednak gdy przyjdzie nam się zmierzyć z brakiem polskich liter to warto krok po kroku prześledzić tą liste i dokonać odpowiednich zmian. Oczywiście zmiana ustawień kodowania PHP bez uprawnień nie uda nam się, jednak warto mieć świadomość co można zrobić i co może byc przyczyną błędu.

Duży problem jest jeśli mamy źle zakodowaną baze danych, tzn w samej bazie polskie litery zostały źle zapisane. Taką sytuację można często przeoczyć gdyż może się zdażyć, że na stronie jest wszystko oki (strona ma takie kodowanie jakie kodowanie mają znaki zapisane w bazie). Moje rozwiązanie: wyeksportować dane do pliku SQL i tam pozmieniać krzaki na polskie litery, proste do powiedzenia gorzej do wykonania, przy dużych bazach PERL okaże się bezcenny oraz trzeba wiedzieć jak uzyskać (znaleźć) tabele krzaków i odpowiadające im polskie litery.


Opcje

Info