Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Duże i małe litery na róni
Forum PHP.pl > Forum > Przedszkole
WEC_26
Mam skrypt wyszukiwarki oparty na mysql. Oto kawałek kodu:
  1. <?php
  2. $q = $_POST[szukane_slowo];
  3. $SQL = "SELECT * FROM szukaj WHERE opis LIKE '%$q%'";
  4. $RES = mysql_query($SQL);
  5. list($iloscWpisow) = mysql_fetch_row($RES);
  6. while($AFR = mysql_fetch_assoc($RES)){
  7. echo '<b>Tytol</b>: <a href="'.$AFR['url'].'">'.str_replace($q, "<b>$q</b>", $AFR['tytol']).'</a><br />'."n";
  8. echo '<b>Opis</b>: '.str_replace($q, "<b>$q</b>", $AFR['opis']).'<br />'."n";
  9. echo '<small>Url: '.str_replace($q, "<b>$q</b>", $AFR['url']).'</small<br /><br />'."n";
  10. }
  11. ?>


Problem tkwi w tym, że dla serwera szukane słowo np."Szukaj" i "szukaj" to całkiem inne wyrazy, czyli traktuje duże i małe litery jako osobne.

Co zrobić, aby duże litery i małe traktowane były tak samo, czili po wpisaniu "Szukaj" znajdowało także rekordy "szukaj" oraz "SzUkAj"??
myth
Sprawdz jeszcze raz. Powinno dobrze wyswietlac.

Sytuacja, ktora opisales mialaby miejsce jakbys dal w zapytaniu:
  1. <?php
  2. $SQL = "SELECT * FROM szukaj WHERE opis LIKE BINARY '%$q%'";
  3. ?>


Poza tym pisze sie tytuł, a nie tytół.
Skobi
ja robie to tak, co prawda w postgresie natomiast powinno to zadzialac rowniez pod mysql:

  1. SELECT * FROM test WHERE lower(name) = lower('KAZIK');


bądź tak:

  1. SELECT * FROM test WHERE lower(name) LIKE LOWER('%KAZ%');
myth
Autorowi tematu zapewne chodzilo o prawidlowe pogrubenie slowa kluczowego w wyszukanym tekscie, o czym nie napisal, bo SQL wyswietla wszystko ok. smile.gif

Dzieje sie tak, bo w wyrazeniach regularnych wielkosc liter jak najbardziej ma znaczenie i str_replace nie zamieni nam wyrazu "szukaj" na "<b>szukaj</b>" gdy podamy string "SzUkaJ", a zwroci wartosc false.

Zamiast:
  1. <?php
  2. str_replace($q, "<b>$q</b>", $AFR['opis'])
  3. ?>


Proponuje dac np:
  1. <?php
  2. str_replace(strtolower($q), "<b>$q</b>", strtolower($AFR['opis']))
  3. ?>
WEC_26
myth miał rację. Wszystko popsół str_replace w 'podstawowej' wersji. zmieniłem to zgodnie z zaleceniami myth i jest prowie wszystko ok. Jest taki 1 mały minus.

Wpisując "SzUkAj" w wynikach wyszukiwania zostało poprawnie znalezione i pogrubione, ale zamiast 'zostawic' wielkość liter w spokoju i tylko pogrubić, funkcja zmieniła także wielkość liter i terez zamiast "Prosty tekst ze słowem szukaj." jest "Prosty tekst ze słowem SzUkAj."
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.