Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> preg_replace i tagi html, potrzebuję pomocy przy konstrukcji wyrażenia
Andrzej20
post 28.06.2009, 14:50:31
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ę? 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
behu
post 28.06.2009, 15:52:53
Post #2





Grupa: Zarejestrowani
Postów: 52
Pomógł: 16
Dołączył: 8.08.2008
Skąd: London

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


może strip_tags" title="Zobacz w manualu PHP" target="_manual i dopiero podświetlanie?

  1. <?php
  2. $posts = preg_replace("/($phraseToHighlight)/i", '<span class="highlight">1</span>', strip_tags($posts));
  3. ?>


Ten post edytował collusio 28.06.2009, 15:57:24


--------------------
Freelancer - [C#, PHP, MySQL, xHTML, CSS]
michal.schweichler [at] gmail.com
http://www.elance.com/s/michal_schweichler/
Go to the top of the page
+Quote Post
szagi3891
post 28.06.2009, 16:56:43
Post #3





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>


--------------------

Każdy z was jest łodzią w której
Może się z potopem mierzyć
Cało wyjść z burzowej chmury
Musi tylko w to uwierzyć!
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: 14.08.2025 - 12:46