Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyszukiwarka pełnotekstowa bez polskich liter
Forum PHP.pl > Forum > Przedszkole
Pcbecaw
Mam taką wyszukiwarkę:
  1. <?
  2. include('config.php');
  3. $sql = "SET CHARSET utf8";
  4. error_reporting(E_ALL ^ E_NOTICE);
  5. if(addslashes($_POST['formularz']) == "wyslano")
  6. {
  7. $haslo = mysql_real_escape_string(strip_tags($_POST['wyszukiwarka']));
  8.  
  9. $sel = mysql_query("SELECT `temat`,`tekst`,`keywords` FROM newsy WHERE MATCH(temat,tekst,keywords) AGAINST('$haslo'IN BOOLEAN MODE)") or die (mysql_error());
  10. echo '';
  11. if (strlen($_POST['wyszukiwarka']) == 0)
  12. {
  13. echo 'Nie wypełniono pola wyszukiwania.';
  14. }
  15. elseif(mysql_num_rows($sel) > 0)
  16. {
  17. While($row = mysql_fetch_array($sel))
  18. {
  19. echo " ".$row['temat']." ";
  20. echo " ".$row['tekst']." ";
  21. }
  22. }
  23. else
  24. {
  25. echo 'brak wyników';
  26. }echo ' ';}
  27. mysql_close($conn) ;
  28. ?>

i wyszukuje wszystko ok, dopóki nie ma polskich liter. Jeśli da się jakąś polską literę, to pokazuje komunikat, że brak wyników. Przykładowo: w bazie znajduje się "śmierć", to po wpisaniu "smierc", znajdzie rekord. Ale jeśli wpisze się z polskimi literami, czyli: "śmierć", wtedy pokaże brak wyników. Czym to może być spowodowane i jak to naprawić? Kodowanie bazy - utf8_general_ci, kodowanie strony - utf8.

Próbowałem przekonwertować na nowo rekordy, ale nie w tym rzecz jednak leży. Mam wrażenie, że nie jest to problem z kodowaniem chociaż może być z metodą porównywania napisów w indeksach? o to mi chodzi konkretniej:
nie wiem tylko jak zmienić, by tam było utf8. Jednak mam wrażenie, że problem leży w samym skrypcie wyszukiwarki, jednak nie mam pojęcia jak to zmodyfikować. Macie jakieś pomysły?
ActivePlayer
a jaką masz metodę porównywania znaków na kolumnie?
Pcbecaw
wszedzie mam utf8, ale sprecyzuj proszę, bo nie wiem czy dokładnie zrozumiałem.
JoShiMa
Cytat(Pcbecaw @ 31.08.2011, 14:29:57 ) *
wszedzie mam utf8, ale sprecyzuj proszę, bo nie wiem czy dokładnie zrozumiałem.


W kolumnie w której realizujesz to wyszukiwanie zrób Metoda porównywania napisów utf8_polish_ci
Pcbecaw
niestety nic nie pomogło. możliwe, że to leży w kodzie wyszukiwarki, tylko nie wiem jak to zmodyfikować. ma ktoś jakiś pomysł?

w sumie to nie jestem pewien czy dobrze to zrobiłem:
wyszukiwanie realizuję w trzech kolumnach i w nich zrobiłem kodowanie na utf8_polish_ci i wtedy przestało wyszukiwać w jakikolwiek sposób. Zawsze wyskakiwał komunikat o braku wyników. Po powrotnej zmianie na general_ci wszystko chodzi. Wydaje się, że TYLKO w tym kodowaniu wyszukiwarka działa. Co z tym jest nie tak?

Ten problem jest jakiś nielogiczny. Dlaczego nie znajduje? zakodowanie formularza na charset="utf8" również nic nie daje.
Co z tym może być? Z tego się wydaje, że polskie litery formularz przekazuje dobrze, ale to wygląda na to, jakby baza myślała, że te polskie litery nie występują w bazie i nie wie co to są polskie litery, bo ich zwyczajnie nie pokazuje. Woli wyświetlić brak wyników.
Naprawdę jestem ciekawy DLACZEGO nie wyszukuje polskich liter...

chyba z 20 stron googlowskich przeszukałem i znalazłem jedną osobe z takim samym problemem, ale tam również nikt nie potrafił jej pomóc. Może tego po prostu nie da się zrobić?

EDIT:

Taki mały spis, bo może coś mam źle:
Tabela - newsy
Mechanizm składowania - MyISAM
Metoda porównywania napisów - utf8_general_ci

Teraz ciekawostka: próbowałem w phpmyadmin wyszukać rekordu "śmierć" z polskimi literami i znalazło. Z tego wnioskuję, że może w kodzie wyszukiwarki fulltext leży błąd? w phpmyadmin próbowałem wyszukiwać z pomocą LIKE %...%
JoShiMa
A masz możliwość użycia sphinxa? Jeśli tak to daj sobie spokój z wyszukiwaniem pełnotekstowym na bazie i użyj mechanizmów sphinxa
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.