php str_ireplace без потери дела

можно ли запустить str_ireplace без разрушения исходного корпуса?

Например:

$txt = "Hello How Are You"; $a = "are"; $h = "hello"; $txt = str_ireplace($a, "<span style='background-color:#EEEE00'>".$a."</span>", $txt); $txt = str_ireplace($h, "<span style='background-color:#EEEE00'>".$h."</span>", $txt); 

это все работает отлично, но результат выводит:

 [hello] How [are] You 

вместо:

 [Hello] How [Are] You 

(квадратные скобки являются цветным фоном)

Благодарю.

Solutions Collecting From Web of "php str_ireplace без потери дела"

Вероятно, вы ищете:

 $txt = preg_replace("#\\b($a|$h)\\b#i", "<span style='background-color:#EEEE00'>$1</span>", $txt); 

… или, если вы хотите выделить весь массив слов (возможность также использовать метасимволы):

 $txt = 'Hi! How are you doing? Have some stars: * * *!'; $array_of_words = array('Hi!', 'stars', '*'); $pattern = '#(?<=^|\W)(' . implode('|', array_map('preg_quote', $array_of_words)) . ')(?=$|\W)#i'; echo preg_replace($pattern, "<span style='background-color:#EEEE00'>$1</span>", $txt); 

Я думаю, вам нужно что-то в этом направлении: найдите слово, пока оно отображается, а затем используйте это для замены.

 function highlight($word, $text) { $word_to_highlight = substr($text, stripos($text, $word), strlen($word)); $text = str_ireplace($word, "<span style='background-color:#EEEE00'>".$word_to_highlight."</span>", $text); return $text; } 

Не красиво, но должно работать.

 function str_replace_alt($search,$replace,$string) { $uppercase_search = strtoupper($search); $titleCase_search = ucwords($search); $lowercase_replace = strtolower($replace); $uppercase_replace = strtoupper($replace); $titleCase_replace = ucwords($replace); $string = str_replace($uppercase_search,$uppercase_replace,$string); $string = str_replace($titleCase_search,$titleCase_replace,$string); $string = str_ireplace($search,$lowercase_replace,$string); return $string; }