Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [sql] Porównywanie znaków - ignorowanie polskich znaków
propage
post 16.09.2010, 16:39:46
Post #1





Grupa: Zarejestrowani
Postów: 330
Pomógł: 0
Dołączył: 25.01.2008

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


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ć

Ten post edytował propage 16.09.2010, 16:41:05
Go to the top of the page
+Quote Post
rocktech.pl
post 16.09.2010, 17:15:26
Post #2





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


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. }


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
piotr94
post 16.09.2010, 18:27:46
Post #3





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

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


wyrażenia regularne odpalane na MySQL + zastępowanie każdego znaku, który może być diakrytyzowany alternatywą (np. l -> l lub ł )


--------------------
http://www.piotr94.net21.pl/ - wykonanie stron i serwisów internetowych
Jeśli moje wypowiedzi były dla Ciebie pomocne, kliknij "Pomógł" i odwdzięcz się ;)
Go to the top of the page
+Quote Post
propage
post 17.09.2010, 07:52:10
Post #4





Grupa: Zarejestrowani
Postów: 330
Pomógł: 0
Dołączył: 25.01.2008

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


rocktech.pl - przyznam ze nie rozumiem tej funkcji, możesz mi ją objaśnić?
piotr94 - możesz pokazac kawalek takiego kodu
Go to the top of the page
+Quote Post
borec
post 17.09.2010, 08:42:58
Post #5





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 18.07.2003
Skąd: Tarnów

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


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.

Ten post edytował borec 17.09.2010, 08:43:09


--------------------
Gentoo Linux 64bit / PHP 5.2 / MySQL 5.1
-> Administracja serwerami Linux i FreeBSD
Go to the top of the page
+Quote Post
piotr94
post 17.09.2010, 13:38:20
Post #6





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

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


  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ć

Ten post edytował piotr94 17.09.2010, 18:33:44


--------------------
http://www.piotr94.net21.pl/ - wykonanie stron i serwisów internetowych
Jeśli moje wypowiedzi były dla Ciebie pomocne, kliknij "Pomógł" i odwdzięcz się ;)
Go to the top of the page
+Quote Post
Noidea
post 17.09.2010, 14:05:44
Post #7





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


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";


Ten post edytował Noidea 17.09.2010, 14:06:32


--------------------
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 Wersja Lo-Fi Aktualny czas: 8.06.2025 - 06:26