html - getting the code executed error while trying to highlight some words in php
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.
Answer
Solution:
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
Answer
Solution:
Check out this function. Hope it will help. You can change CSS as you wish.
<style>
#keyword{
font-weight: bold;
color: red;
background-color: yellow;
}
</style>
<?php
function highlightKeywords($keyword, $text) {
$filteredKeyword = trim(strip_tags($keyword));
$wordsAry = explode(" ", $text);
$wordsCount = count($wordsAry);
for ($i = 0; $i < $wordsCount; $i++)
if(strcasecmp($filteredKeyword, $wordsAry[$i]) == 0)
$wordsAry[$i] = "<span id=\"keyword\">" . $wordsAry[$i] . "</span>";
return implode(" ", $wordsAry);
}
?>
Source