Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z eregi_replace, Pomijanie pewnych grup znaków...
The Night Shadow
post
Post #1





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


  1. <?php
  2. if ( count($t_nw) > 0 )
  3. {
  4. foreach ( $t_nw AS $slowo )
  5. {
  6. $pattern = '(>[^<]*)('.quotemeta($slowo).')';
  7. $replacement = '1<span color=red>2</span>';
  8. $l_users = eregi_replace($pattern, $replacement, $l_users);
  9. }
  10. }
  11. ?>


Tablica $t_nw zawiera słowa wpisane przez użytkownika w polu wyszukiwania. Zadaniem powyższej pętli jest kolorowanie słów wyszukiwanych przez użytkownika. Jest jednak pewien problem. Funkcja nie bierze pod uwagę, że częścią jednego tagu html może być drugi (tak się dzieje w przypadku dymków overlib.

$link = '<a href="ścieżka" onMouseOver="overlib(\'<table><tr><td>'.$zawartosc_dymka.'</td></tr></table>\', FGCOLOR, \'#FFFFFF\', BGCOLOR, \'#000000\', TEXTCOLOR, \'#000000\', STATUS, \'Dymek zwykły\', VAUTO, WRAP, '.$polozenie_dymka.')" onMouseOut="nd();">'.$tresc_odnosnika.'</a>';

<table><tr><td>'.$zawartosc_dymka.'</td></tr></table>

Problem polega na tym, że gdy wyszukiwanym słowem jest np color całość skryptu się rozwala, ponieważ ostatnim z dwóch znaków <> jest >, więc funkcja eregi_replace umożliwa nadpisywanie słów. Można to obejść w prymitywny spośób:

<table><tr><td>'.$zawartosc_dymka.'</td></tr></table><

a więc dodajac znak < by funkcja blokowała możliwość nadpisywania słów, aż do >. W ten sposób jednak w dynku pojawia się zbędny znak >. Czy istnieje jakaś możliwość, by pozbyć sie tego błędu?

Zastanawiam się, czy da się jakoś wyważać ilość < i >. Tzn. dopiero gdy ilosć < odjąć ilość > jest równa zero można nadpisywac słowa... <aa<sss>sss> SŁOWO

Dopiro SŁOWO byłoby wtedy nadpisywane..

Ewentualnie jak zmusić skrypt do ignorowania znaków <> po ' '?
Go to the top of the page
+Quote Post

Posty w temacie
- The Night Shadow   [PHP] Problem z eregi_replace   29.03.2007, 19:09:52


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: 2.10.2025 - 23:21