I tried to execute some words together to get those words highlighted. But the problem is sometimes but not all the times the code is being executed. The code that i used are here:
function highlightKeywords($text, $keyword) {
$pos = strpos($text, $keyword);
$wordsAry = explode(" ", $keyword);
$wordsCount = count($wordsAry);
for ($i = 0; $i < $wordsCount; $i++) {
if ($pos === false) {
if ($i === 0) {
$highlighted_text = "<span style='font-weight:700;color:#151313;'>" . ucfirst(strtolower($wordsAry[$i])) . "</span>";
} else {
$highlighted_text = "<span style='font-weight:700;color:#151313;'>" . strtolower($wordsAry[$i]) . "</span>";
}
} else {
if ($i === 0) {
$highlighted_text = "<span style='font-weight:700;color:#151313;'>" . strtolower($wordsAry[$i]) . "</span>";
} else {
$highlighted_text = "<span style='font-weight:700;color:#151313;'>" . $wordsAry[$i] . "</span>";
}
}
$text = str_ireplace($wordsAry[$i], $highlighted_text, $text);
}
return $text;
}
here the $text is the whole text that i pass and the $keyword is the word or words that i want to highlight.Here i had some doubt of making the first letter capital that i made by asking question make first letter caps in php but ucfirst(strtolower('string')) does not work . But from this solution only i rearranged my code that is above. But the problem i face is when i pass $text='Vegetarische cup a Soup'
and $keyword='cup a soup'
i get the following code being executed:
Vegetarische an style='font-weight:700;color:#151313;'>cupan> a Soup
Can someone please help me to resolve this error.
Here is the answer that i had used in my code from tomelliott.com
function highlightkeywords($str, $search) {
//$highlightcolor = "#daa732";
$occurrences = substr_count(strtolower($str), strtolower($search));
$newstring = $str;
$match = array();
for ($i=0;$i<$occurrences;$i++) {
$match[$i] = stripos($str, $search, $i);
$match[$i] = substr($str, $match[$i], strlen($search));
$newstring = str_replace($match[$i], '[#]'.$match[$i].'[@]', strip_tags($newstring));
}
$newstring = str_replace('[#]', '<span style="font-weight:700;color:#151313;">', $newstring);
$newstring = str_replace('[@]', '</span>', $newstring);
return $newstring;
}
here i can escape the html tags as well as has the answer for my other question in stackoverflow for maintaining the case sensitivity make first letter caps in php but ucfirst(strtolower('string')) does not work