我正在为我的网络应用创建搜索引擎。现在我想强调为用户搜索请求找到的结果。我有以下功能:
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;
}
它运行良好,但我不希望整个文本出现在搜索结果页面中,因为它可能是文本行的大量内容,因此我只想显示突出显示单词的部分内容。
答案 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>';
}