Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Własna wyszukiwarka na stronie, Pokazywanie określonej ilość znaków przed i za wyszukiwaną frazą
Ryder
post 12.08.2010, 17:49:29
Post #1





Grupa: Zarejestrowani
Postów: 74
Pomógł: 1
Dołączył: 5.01.2008

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


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.
Go to the top of the page
+Quote Post
mastx
post 12.08.2010, 18:07:33
Post #2





Grupa: Zarejestrowani
Postów: 10
Pomógł: 1
Dołączył: 18.06.2009

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


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
Go to the top of the page
+Quote Post
Ryder
post 13.08.2010, 07:18:28
Post #3





Grupa: Zarejestrowani
Postów: 74
Pomógł: 1
Dołączył: 5.01.2008

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


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
Go to the top of the page
+Quote Post
Crozin
post 13.08.2010, 07:22:55
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Yyyy... str_replace ewentualnie preg_replace by było niezależne od wielkości znaków?
Go to the top of the page
+Quote Post
CuteOne
post 13.08.2010, 09:18:47
Post #5





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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


Ten post edytował CuteOne 13.08.2010, 09:20:05
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: 18.07.2025 - 01:39