Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wyszukiwarka pełnotekstowa bez polskich liter
Pcbecaw
post
Post #1





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

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


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?
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


a jaką masz metodę porównywania znaków na kolumnie?
Go to the top of the page
+Quote Post
Pcbecaw
post
Post #3





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

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


wszedzie mam utf8, ale sprecyzuj proszę, bo nie wiem czy dokładnie zrozumiałem.
Go to the top of the page
+Quote Post
JoShiMa
post
Post #4





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


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


--------------------
Go to the top of the page
+Quote Post
Pcbecaw
post
Post #5





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

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


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 %...%
Go to the top of the page
+Quote Post
JoShiMa
post
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


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


--------------------
Go to the top of the page
+Quote Post

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 Aktualny czas: 19.08.2025 - 18:17