突出显示php中的单词并返回包含突出显示单词的部分

时间:2013-07-02 09:54:03

标签: php search replace search-engine highlight

我正在为我的网络应用创建搜索引擎。现在我想强调为用户搜索请求找到的结果。我有以下功能:

function highlight($text, $words) {
    foreach ($words as $word) {
            $word = preg_quote($word);              
            $text = preg_replace("/\b($word)\b/i", '<span class="highlighted">\1</span>', $text);               
    }

    return $text;

}

它运行良好,但我不希望整个文本出现在搜索结果页面中,因为它可能是文本行的大量内容,因此我只想显示突出显示单词的部分内容。

1 个答案:

答案 0 :(得分:1)

这个解决方案怎么样?它使用preg_match_all()来获取单词的所有出现次数,并在其左侧或右侧显示最多10个字符,但仅突出显示匹配的单词

$text = <<<EOF
hello_world sdfsdf
sd fsdfdsf hello_world
 hello_world
safdsa
EOF;

$word = preg_quote('hello_world');
$text = preg_match_all("~\b(.{0,10})($word)(.{0,10})\b~is", $text, $matches);

for($i = 0; $i < count($matches[0]); $i++) {
    echo '<p>'
       . $matches[1][$i]
       . '<span class="hl">'
       . $matches[2][$i]
       . '</span>'
       . $matches[3][$i]
       . '</p>';
}