From http://forum.phpfrance.com/vos-contributions/remplacement-selectif-hors-dans-balises-html-t199.html
function mon_rplc_callback($capture){ global $arg; return ($arg['flag'] == 1) ? $arg['fct']($arg['from'], $arg['to'], $capture[1]).$capture[2] : $capture[1].$arg['fct']($arg['from'], $arg['to'], $capture[2]); } function split_tag($from, $to, $txt, $fct, $flag = 1){ global $arg; $arg = compact('from', 'to', 'fct', 'flag'); return preg_replace_callback('#((?:(?!<[/az]).)*)([^>]*>|$)#si', "mon_rplc_callback", $txt); }
When $ flag == 1, the replace function is applied outside of HTML. When $ flag == -1, the replace function is applied inside HTML.
As applied to your example, it will give something like this:
echo split_tag($words, '<span class="hightlighted_text">'.$words.'</span>', $message, 'str_ireplace', 1);
Enjoy!;)
Savageman
source share