Mam takie zapytanie:
SELECT nazwa_p FROM przepisy WHERE nazwa_p = '$slowo'
Po połączeniu z bazą deklaruję
mysql_query ("SET NAMES utf8"); mysql_query("DEFAULT CHARACTER SET = 'utf8'"); mysql_query("DEFAULT COLLATE = 'utf8_general_ci'");
i w akcie desperacji
<?php mysql_set_charset("utf8"); ?>
Na stronie jest ponadto
<?php ?>
Cały plik zapisany w kodowaniu UTF-8.
I teraz część PHP, w które pobieram zawartość strony zakodowanej w ISO-8859-2, po czym zmieniam to kodowanie na UTF-8:
<?php mb_convert_encoding(str_replace("ISO-8859-2" , "UTF-8" , file_get_contents('adresstrony.pl'))), "UTF-8" , "ISO-8859-2") ?>
Polskie znaki na pobieranej stronie pokazują się bez problemów. Problem jest jedynie, kiedy jakąś z pobranej strony chcę znaleźć w bazie danych. Dla przykładu fraza "Jabłka imbirowe" pobrane z zawartości strony nie jest znajdywane, podczas gdy zapytanie poniższe zapytanie znajduje szukany rekord:
SELECT nazwa_p FROM przepisy WHERE nazwa_p = 'Jabłka imbirowe'
Po zapytaniu jest funkcja do sprawdzenia poprawności:
<?php // tutaj są selecty } } ?>
I w przypadku wpisania szukanego wyrazu z palca, pętla pokazuje TAKIE SAME. Kiedy chodzi o szukany wyraz pod zmienną $slowo, pokazuje Inne. Próbowałem to rozwiązać sqlowym CONVERT, COLLATE w selecie, ale nic nie pomagało. Dziękuję z góry za wszelkie sugestie.
EDIT:
Rozwiązałem problem, który nie tkwił w złym kodowaniu... Zmieniłem po prostu przypisywany klucz z tablicy do zmiennej $slowo i teraz już działa. Poprzedni klucz był opasiony w <b></b>, ale je akurat usuwałem najpierw przez strip_tags, a potem przez str_replace. Jak podglądałem tą poprzednią (złą) zmienną, to tych htmlowych znaczników nie było i myślałem, że jest wszystko wporządu.
Temat założyłem w tzw. akcie desperacji, bo nie dawałem już rady ogarnąć to wszystko na spokojnie po 2 godzinach kombinowania, które okazało się kompletnie nietrafne. Jak moderatorzy uznają go za niepotrzebny, to jestem gotowy na uszczuplenie licznika o 1 post ;-)