[PHP] Zapytania do bazy i kodowanie

Napotkałem na znany pewnie dosyć problem polskich znaków, ale nie mogłem znaleźć sensownego rozwiązania.
Problem miałem mianowicie z botami które przechowywały starą wersję strony która była jeszcze w kodowaniu ISO-8859-2 i przez to zapytania do formularza wyszukiwania wysyłały w tymże kodowaniu. Jako, że nasze kodowanie na stronie i w bazie jest teraz w UTF-8 to oczywiście zapytania z polskimi znakami które były przekazywane w pasku URL w złym formatowaniu wywalały błędy w zapytaniach SQL.

Porównanie URLi:

ISO-8859-2: example.com/?keyword=z%B3%B1czka
UTF-8: example.com/?keyword=złączka

Nie spodziewałem się, że rozwiązanie będzie tak proste, zrobiłem to przy pomocy takiej funkcji:

$keyword = mb_convert_encoding( $keyword, 'utf-8', array('UTF-8','ISO-8859-2') );

Funkcja ta po prostu próbuje przetworzyć kodowanie na utf-8. Dzięki temu, że w argumencie podałem oba kodowania to funkcja radzi sobie (w odpowiedniej kolejności) ze znakami zakodowanymi w obu kodowaniach i przetwarza je w odpowiedni ciąg (nie ma wymogu, żeby ciąg był w konkretnym kodowaniu – dzięki temu znaki w UTF-8 się nie zepsują po przepuszczeniu przez tą funkcję).

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>