Jedną z ważnych decyzji które należy podjąć rozpoczynając tworzenie nowej strony WWW jest określenie sposobu kodowania polskich znaków. Trzy standardy które zazwyczaj bierze się pod uwagę w takiej sytuacji to ISO-8859-2 (zalecany), Windows-1250 (zwykle odradzany) i UTF-8 (standard bazujący na Unicode, polecany do wielojęzycznych stron WWW). Po dokonaniu tego wyboru należy jeszcze dodać odpowiedni nagłówek <meta> do strony aby określić używany zestaw znaków, i ew. ustawić go w swoim ulubionym edytorze tekstu.
Niestety wykonanie tych czynności nie zawsze oznacza koniec problemów z polskimi znakami – może zdarzyć się sytuacja że dane odczytywane z bazy danych, pliku XML lub też pobierane z Internetu będą używać innego standardu kodowania znaków. W takiej sytuacji konieczne będzie dokonanie odpowiedniej konwersji.
Do przeprowadzenia konwersji można napisać własne funkcje w PHP. Znacznie lepiej jednak jest skorzystać z funkcji iconv()
dostępnej w module iconv (moduł ten nie jest domyślnie ładowany; jeżeli go nie masz załadowanego, skontaktuj się z administratorem swojego serwera). Moduł ten opiera się na bibliotece libiconv, czyli na dostępnej na licencji GNU bibliotece służącej do konwersji znaków pomiędzy różnymi standardami kodowania. Nagłówek funkcji iconv()
w PHP wygląda następująco:
string iconv ( string in_charset, string out_charset, string str )
Oznacza to że funkcja ta przyjmuje trzy parametry:
- sposób kodowania znaków w tekście przekazanym jako trzeci parametr;
- docelowy sposób kodowania znaków;
- tekst dla którego ma zostać zmienione kodowanie znaków.
Przykładowo konwersję tekstu z UTF-8 na ISO-8859-2 można wykonać następująco:
$str = iconv("utf-8", "iso-8859-2", $str);
Taki zapis jest jednak nieco przydługi, zwłaszcza jeżeli byłaby potrzeba zastosowania go w kilku miejscach. Dlatego też warto napisać sobie funkcje które uproszczą wywołanie funkcji iconv()
, np. takie jak poniżej:
// Konwersja UTF-8 -> ISO-8859-2 function Utf8ToIso($str) { return iconv("utf-8", "iso-8859-2", $str); } // Konwersja ISO-8859-2 -> UTF-8 function IsoToUtf8($str) { return iconv("iso-8859-2", "utf-8", $str); }
Podsumowując: najłatwiejszą metodą wykonania konwersji standardów kodowania polskich (i nie tylko) znaków w PHP jest użycie funkcji iconv()
z modułu o tej samej nazwie. Warto także zainteresować się pozostałymi funkcjami udostępnianymi przez ten moduł, gdyż ich użycie zdecydowanie ułatwi pisanie skryptów PHP które muszą sobie radzić z różnymi standardami kodowania polskich znaków.
Komentarze