突出显示有或没有特殊标记的匹配单词

时间:2015-01-30 12:06:22

标签: php regex preg-replace

我正在尝试为我的搜索功能实现此代码,该代码将在结果中突出显示匹配的关键字。它工作得很好,但问题是它不会突出显示具有特殊标记的关键字,如:

$ text =“iphonemới”;

问题1:如果关键字是“mới”,它将在$ text中突出显示单词“mới”。但如果关键字是“moi”,它就不会突出显示它。顺便说一句,mới=我的语言中的新词。那么如何调整此代码才能使其正常工作?

问题2:还有如何使它突出显示$ text中的单词部分,如:if关键字是“iph”,它还会在$ text中突出显示iphone单词的iph。

非常感谢提前...... !!!

<?php
function highlightWords($text, $words)
{
    /*** loop of the array of words ***/
    foreach ($words as $word)
    {
            /*** quote the text for regex ***/
            $word = preg_quote($word);
            /*** highlight the words ***/
            $text = preg_replace("/\b($word)\b/i", '<span class="highlight_word">\1</span>', $text);
    }
    /*** return the text ***/
    return $text;
}


/*** example usage ***/
$text = 'This text will highlight PHP and SQL and sql but not PHPRO or MySQL or sqlite';
/*** an array of words to highlight ***/
$words = array('php', 'sql');
/*** highlight the words ***/
$highlighttext =  highlightWords($string, $words);

?>

<html>
<head>
<title>PHPRO Highlight Search Words</title>
<style type="text/css">
.highlight_word{
    background-color: pink;
}
</style>
</head>
<body>
 <?php echo $string; ?>

   

1 个答案:

答案 0 :(得分:0)

试试这段代码,

function highlightWords($str, $replaceWord)
{
    $new = '<span class="highlight_word">'.$replaceWord.'</span>';

    $str = preg_replace_callback( "/$replaceWord/", function( $match) use( $new) {
        return $new;
    }, $str);

    return $str;
}