Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyszukiwarka zamiana znaków.
Forum PHP.pl > Forum > Przedszkole
cykcykacz
Witam, oneeyedsmiley02.png
mam taki problem w bazie danych mam zapisane nazwy miast np: Ostrów. Chcę zrobić wyszukiwarkę, która po wprowadzeniu "ostrow" znajdzie mi "Ostrów". Jednak mam kłopot ze zamianą znaków. Tutaj mam fajną funkcję tylko ona zmienia to odwrotnie:
Kod
function clear_spec_char($text){
   $tabela = Array(
   //WIN
    "\xb9" => "a", "\xa5" => "A", "\xe6" => "c", "\xc6" => "C",
    "\xea" => "e", "\xca" => "E", "\xb3" => "l", "\xa3" => "L",
    "\xf3" => "o", "\xd3" => "O", "\x9c" => "s", "\x8c" => "S",
    "\x9f" => "z", "\xaf" => "Z", "\xbf" => "z", "\xac" => "Z",
    "\xf1" => "n", "\xd1" => "N",
   //UTF
    "\xc4\x85" => "a", "\xc4\x84" => "A", "\xc4\x87" => "c", "\xc4\x86" => "C",
    "\xc4\x99" => "e", "\xc4\x98" => "E", "\xc5\x82" => "l", "\xc5\x81" => "L",
    "\xc3\xb3" => "o", "\xc3\x93" => "O", "\xc5\x9b" => "s", "\xc5\x9a" => "S",
    "\xc5\xbc" => "z", "\xc5\xbb" => "Z", "\xc5\xba" => "z", "\xc5\xb9" => "Z",
    "\xc5\x84" => "n", "\xc5\x83" => "N",
   //ISO
    "\xb1" => "a", "\xa1" => "A", "\xe6" => "c", "\xc6" => "C",
    "\xea" => "e", "\xca" => "E", "\xb3" => "l", "\xa3" => "L",
    "\xf3" => "o", "\xd3" => "O", "\xb6" => "s", "\xa6" => "S",
    "\xbc" => "z", "\xac" => "Z", "\xbf" => "z", "\xaf" => "Z",
    "\xf1" => "n", "\xd1" => "N",
    //I to co nie potrzebne
   "$" => "-", "!" => "-", "@" => "-", "#" => "-", "%" => "-");

   return strtr($text,$tabela);
}

Wiadomo zmieniła by Ostrów === na Ostrow. Tylko, że ja muszę zrobić to odwrotnie. Więc chciałem to zrobić w ten sposób:
Kod
function _no_pl($tekst)
{
   $tabela = Array(

"\x6f"   => "ó", "\x4f" => "Ó");

   return strtr($tekst,$tabela);
}

Tylko teraz po wprowadzeniu Ostrow zmienia na Óstrów.
Jak zrobić aby sprawdziło wszystkie kombinacje czyli:
Óstrow = Ostrów ? jeżeli nie
Óstrów = Ostrów ? jeżeli nie
Ostrów = Ostrów prawda skrycik wykonuje się dalej? smile.gif
peter13135
niezbyt to profesjonalne... ale możesz dać znak zapytania wszędzie tam gdzie jest polski znak

czyli zamiast szukać ostrów, szukaj ostr?w
cykcykacz
Tylko chodzi mi o wymianę o => ó, i sprawdzenie wszystkich kombinacji czyli.
óstrow = ostrów, jeżeli nie zmienia dalej
óstrów = ostrów, jeżeli nie zmienia dalej
ostrów = ostrów, prawda
JoShiMa
a jakie masz kodowanie w bazie? przejdz na utf8_general_ci i problem sam sie rozwiąże.
cykcykacz
Zmieniłem kodowanie bazy, tabeli nadal nie znajduje sciana.gif
Tak wygląda moje zapytanie
Kod
$select->where("r.city LIKE '%". $data['city']. "%'");
wNogachSpisz
a nie prościej trzymać w bazie danych słowa bez ogonków?
cykcykacz
No dobra smile.gif Tylko powiedzmy zapisuje te dane do bazy bez ogonków.
Jak je teraz wyświetlić z ogonkami na stronie?

Ps: jak wy rozwiązaliście wyszukiwarkę na waszych stronach.
JoShiMa
Cytat(cykcykacz @ 5.04.2011, 16:48:18 ) *
Ps: jak wy rozwiązaliście wyszukiwarkę na waszych stronach.

No tłumaczę jak dziecku. Jak w bazie jest utf8_general_ci to wszystko jedno czy wpiszesz z ogonkami czy bez, to i tak znajdzie.
wNogachSpisz
Generalnie jeśli już bierzemy się za wyszukiwanie czegokolwiek w bazie
warto utworzyć do tego celu osobną tabele, gdzie będziemy trzymać relację słów kluczowych do artykułów/tematów/postów czy czego tam szukamy...
Wpisaną frazę dzielimy na słowa, dla każdego słowa wykonujemy zapytanie wsparte przez indeksy..
Wyszukiwanie będzie trwało tyle co na google, bez znaczenia jak wiele contentu przeszukujemy..

Inaczej musimy robić full-text-search który trwa półtora miliona lat świetlnych i przeciąża bazę.
cykcykacz
JoShiMa miałaś rację. Wcześniej zmieniłem kodowanie bazy, tabeli ... ale pominąłem kodowanie kolumny.
Wielkie dzięki.
Pozdrawiam.
JoShiMa
Cytat(wNogachSpisz @ 5.04.2011, 17:14:09 ) *
Inaczej musimy robić full-text-search który trwa półtora miliona lat świetlnych i przeciąża bazę.

Albo uzyjemy sphinksa i będzie mgnienie oka tongue.gif

Aha. JoShiMa jest kobietą smile.gif

Wiem, że miałam rację, bo się sama dziś na tym rozbiłam. Znaczy dla mnie był to efekt niepożądany smile.gif
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.