можно ли запустить 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
(квадратные скобки являются цветным фоном)
Благодарю.
Вероятно, вы ищете:
$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; }