尝试突出显示 php 中的某些单词时出现代码执行错误

getting the code executed error while trying to highlight some words in php

我试图一起执行一些单词以突出显示这些单词。但问题有时但并非总是在执行代码。 我使用的代码在这里:

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;
}

这里的 $text 是我传递的整个文本,$keyword 是我想要的一个或多个单词 highlight.Here 我对通过提问将首字母大写表示怀疑。但是从这个解决方案中,我只重新排列了上面的代码。但是我面临的问题是当我通过 $text='Vegetarische cup a Soup'$keyword='cup a soup' 时,我得到了以下代码的执行:

Vegetarische an style='font-weight:700;color:#151313;'>cupan> a Soup

谁能帮我解决这个错误。

检查这个函数。希望它会有所帮助。您可以根据需要更改 CSS。

<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);
    }
?>

这是我在 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;
 
}

这里我可以转义 html 标签以及我在 Whosebug 中的其他问题的答案,以保持区分大小写 在 php 中首字母大写但是 ucfirst (strtolower('string')) 不起作用