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 ' '?