Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [sql] Porównywanie znaków - ignorowanie polskich znaków
Forum PHP.pl > Forum > PHP
propage
Chciałbym stworzyć wyszukiwarkę, która będzie zwróci te same wyniki, gdy kto¶ wpisze "długa" lub "dluga".
W bazie jest zapisana poprawna warto¶ć z "ł" - "długa"
Jak najpro¶ciej to zrobić
rocktech.pl
Przepu¶ć $szukam;
Przez to.
  1. $repl_arr=array(
  2. "±" => "____", "ę" => "____", "ó" => "%",
  3. "ń" => "____", "¶" => "____", "ł" => "%",
  4. "ż" => "____", "Ľ" => "____", "ć" => "____"
  5. );
  6. foreach($repl_arr as $i=>$u) {
  7. $asd = mb_eregi_replace($i,$u,$szukam);
  8. }
piotr94
wyrażenia regularne odpalane na MySQL + zastępowanie każdego znaku, który może być diakrytyzowany alternatyw± (np. l -> l lub ł )
propage
rocktech.pl - przyznam ze nie rozumiem tej funkcji, możesz mi j± obja¶nić?
piotr94 - możesz pokazac kawalek takiego kodu
borec
AFAIK, MySQL przy wyszukiwaniu typu LIKE nie rozróżnia polskich znaków diakrytycznych, więc nie musisz nic podmieniać je¶li masz zamiar wyrzukiwać w ten sposób.
piotr94
  1. $keywords_tabb=preg_replace(array('|^ +|','| +$|','| +|','|[óÓoO]{2}|','|[±ˇaA]{2}|','|[¶¦sS]{2}|','|[łŁlL]{2}|','|[żŻzZ]{2}|','|[Ľ¬zZ]{2}|','|[ćĆcC]{2}|','|[ńŃ]{2}|'),array('','','|-|','[oOÓó]+','[±ˇAa]+','[¶¦Ss]+','[łŁLl]+','[ŻżzZ]+','[Ľ¬zZ]+','[ćĆcC]+','[ńŃnN]+'),$_SESSION['usearch_keywords']);
  2. ...
  3. $keywords_match_where.="LOWER(keywords) REGEXP LOWER('.*$val_k.*') OR LOWER(desc_pl) REGEXP LOWER('.*$val_k.*') OR LOWER(ofert_pl) REGEXP LOWER('.*$val_k.*') OR LOWER(name) REGEXP LOWER('.*$val_k.*') OR ";

fragment na żywca z kodu jednej mojej strony, rozgryĽ resztę sam i zmodyfikuj odpowiednio
EDIT : przystosowałem nieco do Twoich celów, ale nie wiem czy nie będzie pewnych drobnych problemów, bo nie mam za bardzo czasu, żeby przetesotwać
Noidea
Generalnie to co chcesz osi±gn±ć załatwia się w MySQL ustawieniem: COLLATION utf8_general_ci. Ale żeby nie było zbyt łatwo, to MySQL i tak traktuje wtedy "ł" i "l" oraz "Ł" i "L" jako różne znaki smile.gif
Więc je¶li interesuj± cię wył±cznie polskie znaki, to ustaw odpowiednie COLLATION i załatw sprawę literki Ł tak jak ci ludzie doradzaj±.



Test
  1. SET NAMES utf8 COLLATE utf8_general_ci;
  2. SELECT "±" = "a",
  3. "ż" = "z",
  4. "¶" = "s",
  5. "Ľ" = "z",
  6. "ę" = "e",
  7. "ć" = "c",
  8. "ń" = "n",
  9. "ó" = "o",
  10. "ł" = "l",
  11. "ˇ" = "a",
  12. "Ż" = "z",
  13. "¦" = "s",
  14. "¬" = "z",
  15. "Ę" = "e",
  16. "Ć" = "c",
  17. "Ń" = "n",
  18. "Ó" = "o",
  19. "Ł" = "l";
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.