[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ę).

[php] Explode bez pustych stringów

Natrafiłem na mały problem, związany z uzyciem funkcji explode. Chciałem wywalić wszystkie elementy tablicy które są pustymi stringami. Można oczywiście przeiterować całą wynikową tablicę usuwając niepotrzebne wartości, ale znalazłem prostszą metodę przy pomocy wyrażeń regularnych:

$exploded = preg_split('@/@', '1/2//3/', NULL, PREG_SPLIT_NO_EMPTY);

Źródło: http://stackoverflow.com/questions/64570/explode-that-doesnt-return-empty-strings#answer-64608