Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Własna wyszukiwarka na stronie
Forum PHP.pl > Forum > PHP
Ryder
Hej

Zrobiłem wyszukiwarkę na stronie i chciałbym ją wzbogacić o pogrubienie i pokazanie określonej ilość znaków przed i za wyszukiwaną frazą,
tak jak to jest w przypadku wyszukiwarki Google (Nie chce korzystać z silnika Google)

Korzystam z tabeli : InnoDB.

W jaki sposób można to wykonać, jakieś linki do tutoriali.
mastx
pogrubienie można zrobić za pomocą preg_replace, a jeśli chodzi o ilość znaków przed i za to nie bardzo rozumiem o co chodzi. Chcesz policzyć ile jest znaków za szukaną frazą ? można by użyć strpos + substr + strlen
Ryder
Więc, tak robie np. takie zapytanie do bazy
  1. SELECT * FROM articles WHERE content LIKE '%$zmienna%';

To mi zwraca wszystkie artykuły gdzie wystąpiła wprowadzona fraza w wyszukiwarce.

Chciałbym teraz wyświetlić wyniki w sposób tak, jak to robi wyszukiwarka google, czyli wybrać tylko kawałek najbardziej dopasowanego tekstu, pogrubić frazy.

np. dla frazy PHP w Google mamy
Forum PHP.pl (Powered by Invision Power Board)
Raczkujesz w tematyce WWW (PHP, SQL, (X)HTML, CSS, JS, XML, AJAX)? ... Jeśli masz problem ze skryptem php tutaj jest odpowiednie miejsce, ...
forum.php.pl/ - Kopia - Podobne
Crozin
Yyyy... str_replace ewentualnie preg_replace by było niezależne od wielkości znaków?
CuteOne
Z palca ale powinno działać smile.gif

  1.  
  2. function BoldText($haystack, $needle) {
  3.  
  4. $haystack = str_replace($needle,'<b>'.$needle.'</b>',$haystack);
  5. $haystack = str_replace(strtolower($needle),'<b>'.strtolower($needle).'</b>',$haystack);
  6. //itd. poszukaj w manualu funckcji obsługujących stringi..
  7.  
  8. return $haystack;
  9. }
  10.  
  11. function StrAfter($haystack, $needle, $za) {
  12.  
  13. $pos = strpos($haystack, $needle);
  14.  
  15. if (is_int($pos)) {
  16.  
  17. $heystack = substr($haystack, $pos + strlen($needle));
  18. $heystack = (strlen($heystack) > $za) ? substr($heystack,0,$za).'(...)' : $heystack;
  19. }
  20.  
  21. return $heystack;
  22. }
  23.  
  24. function StrBefore($haystack, $needle, $przed) {
  25.  
  26. $pos = strpos($haystack, $needle);
  27.  
  28. if (is_int($pos)) {
  29.  
  30. $heystack = substr($haystack, 0, $pos);
  31. $heystack = (strlen($heystack) > $przed) ? '(...)'.substr($heystack,$pos-$przed,$pos) : $heystack;
  32. }
  33.  
  34. return $heystack;
  35. }
  36.  


  1. $heystack = 'tralala na tym forum jest anty rasizm ;o lol mieSZKAŁ fajną ma skórę ten nasz koleżka.
  2. bi_ali im tego pozazdrościli i za karę wszystkich wybili'; //artykuł do przeszukania
  3. $needle = 'SZKAŁ'; //szukana fraza
  4. $przed = 10; // ile zostawić przed
  5. $za = 70; // ile zostawić za
  6.  
  7.  
  8. $a = StrBefore($heystack, $needle, $przed);
  9. $b = StrAfter($heystack, $needle, $za);
  10.  
  11. echo BoldText($a.$needle.$b,$needle);
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.