Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> preg_replace i tagi html, potrzebuję pomocy przy konstrukcji wyrażenia
Andrzej20
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 3.11.2006

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


Hej,

Jestem na ukończeniu mechanizmu wyszukiwarki na swojej stronie, ale utknąłem przy podświetlaniu wyszukiwanych słów. Tzn. wszystko jest dobrze, dopóki jakiś cwaniak nie będzie próbował wyszukać słowa będącego atrybutem jakiegoś tagu html, np. "title", ponieważ w bazie trzymam w przeszukiwanych polach cały html.

W związku z tym, chcę przerobić użytego przeze mnie preg_replace'a tak, aby podświetlane były tylko słowa które nie znajdują się pomiędzy "<", a ">". Chyba dobrze rozumuję? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Poniżej kawałek kodu z moim aktualnym preg_replace'm. Czy ktoś wie jak powinno brzmieć to wyrażenie, żeby działało tak jak wspomniałem wyżej?

  1. <?php
  2. $posts = preg_replace("/($phraseToHighlight)/i", '<span class="highlight">1</span>', $posts);
  3. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
szagi3891
post
Post #2





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

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


  1. <?php
  2. $dane = '
  3. <html>
  4. <head>
  5.    <title class="cos">moja super strona - wyniki wyszukiwania cos</title>
  6. </head>
  7. <body>
  8.  
  9. <div> cos kskk sadasd <b>dasdas cos </b> </div>
  10. <p id="cos">cos</p>cos
  11. </body>
  12. </html>
  13. ';
  14.  
  15. $szukane_slowo = 'cos';
  16.  
  17. $dane = preg_replace_callback('#(<body>)(.*)(</body>)#si', fun_1, $dane);
  18.  
  19. function fun_1($arg) {
  20.    
  21.    $arg[2] = preg_replace_callback('#(<[^<>]*>)([^<>]*)#si', fun_2, $arg[2]);
  22.    
  23.    return $arg[1] . $arg[2] . $arg[3];
  24.    }
  25.  
  26. function fun_2($arg) {
  27.    
  28.    global $szukane_slowo;
  29.    
  30.    //$arg[2] = str_replace($szukane_slowo, '<span class="highlight">' . $szukane_slowo . '</span>', $arg[2]);
  31.    $arg[2] = str_replace($szukane_slowo, '<font color="red">' . $szukane_slowo . '</font>', $arg[2]);
  32.    
  33.    return $arg[1] . $arg[2];
  34.    }
  35.  
  36. print $dane;
  37. ?>


Uruchom sobie ten przykład. Oczywiście niechlujnie ten kod jest napisany, chodziło mi wyłącznie o zaprezentowanie funkcji preg_replace_callback która została użyta. Najpierw wyszukiwany jest teks który znajduje się pomiędzy znacznikami <body>..</body> a następnie wyszukiwana jest każda para tekstu <znacznik>tekst a na samym końcu dopiero za pomocą standardowej funkcji str_replace podmieniany jest "tekst" na <wyroznienie>tekst</wyroznienie>
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 06:01