Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Jeden select, dwa różne zachowania
Forum PHP.pl > Forum > Przedszkole
Koniczynka
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 ;-)
drPayton
Cytat(Koniczynka @ 14.10.2008, 22:56:41 ) *
(...)
  1. mysql_query ("SET NAMES utf8");
  2. mysql_query("DEFAULT CHARACTER SET = 'utf8'");
  3. mysql_query("DEFAULT COLLATE = 'utf8_general_ci'");

(...)


Któryś raz juz to widzę. Po to jest SET NAMES, żeby nic innego nie było już potrzebne. Set names zawiera w sobie dwie następne "instrukcje" więc nie ma sensu ich dawać...
Koniczynka
To efekt pozostałości po tych kombinacjach. Nie działały mi niezawodne dotąd sposoby i chwytałem się czego popadnie, żeby naprawić błąd.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.