Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Jeden select, dwa różne zachowania
Koniczynka
post 14.10.2008, 21:56:41
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 24.05.2006

Ostrzeżenie: (0%)
-----


Witajcie,

Mam takie zapytanie:

  1. SELECT nazwa_p FROM przepisy WHERE nazwa_p = '$slowo'


Po połączeniu z bazą deklaruję

  1. mysql_query ("SET NAMES utf8");
  2. mysql_query("DEFAULT CHARACTER SET = 'utf8'");
  3. mysql_query("DEFAULT COLLATE = 'utf8_general_ci'");


i w akcie desperacji
  1. <?php
  2. mysql_set_charset("utf8");
  3. ?>


Na stronie jest ponadto

  1. <?php
  2. header("Content-type: text/html; charset=utf-8");
  3. ?>


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:

  1. <?php
  2. mb_convert_encoding(str_replace("ISO-8859-2" , "UTF-8" , file_get_contents('adresstrony.pl'))), "UTF-8" , "ISO-8859-2")
  3. ?>


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:

  1. SELECT nazwa_p FROM przepisy WHERE nazwa_p = 'Jabłka imbirowe'


Po zapytaniu jest funkcja do sprawdzenia poprawności:

  1. <?php
  2. $slowo = str_replace($html, $brak, trim($categs[0][36]));
  3.  
  4. // tutaj są selecty
  5.  
  6. if (trim($slowo) == trim($ro['nazwa_p'])) {
  7.        echo "TAKIE SAME";
  8.       }
  9.       elseif (trim($slowo) != trim($ro['nazwa_p'])) {
  10.          echo "Inne";
  11.       }
  12. ?>


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 ;-)

Ten post edytował Koniczynka 14.10.2008, 22:06:57
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 11:49