При условии, что слова введены в виде строки, разделенной пробелами, вы можете просто использовать explode
$words = explode(' ', $term);
Хотя, если вы хотите убедиться, что пробелов не много, вы можете сначала удалить их из строки
$term = preg_replace('/\s+/', ' ', trim($term));
$words = explode(' ', $term);
Затем вам нужно сгенерировать заменяющий массив
$highlighted = array();
foreach ( $words as $word ){
$highlighted[] = "<span class='highlight'>".$word."</span>"
}
Тогда
str_replace($words, $highlighted, $string);
Так что сложив все вместе
function highlightWords($string, $term){
$term = preg_replace('/\s+/', ' ', trim($term));
$words = explode(' ', $term);
$highlighted = array();
foreach ( $words as $word ){
$highlighted[] = "<span class='highlight'>".$word."</span>"
}
return str_replace($words, $highlighted, $string);
}