突出显示搜索字词

时间:2009-04-10 18:45:00

标签: php php4

我有一个案例,我将返回数据库结果,并根据搜索字词在页面上显示它们。这部分工作正常,但我希望通过将它们包含在span标签中来高亮显示这些搜索项。我开始编写一个函数,我调用了每个使用str_replace函数的结果,但随后我突然意识到这也会影响HTML标记中的任何文本。有没有人有他们用来有效地做这个的功能?我正在使用PHP 4。 谢谢!

3 个答案:

答案 0 :(得分:3)

我会用javascript来突出显示

http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html

$(document).ready(function(){
$('#your_results_list').removeHighlight().highlight('search_word');
}

这样你就不会弄乱源,用户可以根据需要调整高亮等等。

答案 1 :(得分:2)

我曾经在Perl中编写了一个搜索,就像这样(对PHP做了一点翻译):

// Split up the full page content in pieces without `<` and `>`
preg_match_all("/([^<>]+)/", $pageContent, $matches);
foreach ($matches as $val) {
    // Just print the $val if it was between < and >
    if (preg_match("/<$val>/", $pageContent) { print "<$val>"; }
    else {
       // Do the replace
       print str_replace( "$searchString", "<span>$searchString</span>", $val);
   }
}

如果符合以下条件,您可以避免使用正则表达式:

 // Split up the full page content in pieces with `<`
 $matches = split("<", $pageContent);
 foreach ($matches as $val) {
    // Just print the $val if it was between < and >
    if (stristr($pageContent, "<$val")) { print "<$val"; }
    else {
       // Do the replace
       print str_replace( "$searchString", "<span>$searchString</span>", $val);
   }
}

没有测试,但应该是这样的。

答案 2 :(得分:0)

如果您要返回显示它们的结果,那么您是否应该在将原始数据转换为html之前访问原始数据?如果是这样,那么通过在那里添加span标记来修改原始数据。

如果您说您的原始数据已经其中包含html,您可以使用正则表达式来检测您是否在html标记内,并使用preg_replace而不是str_replace。

其他选择:

- 将结果加载到dom解析器中,并且只对叶文本节点上的替换操作

- 编写自己的解析器以跟踪您是否在html标记内

- 从结果中抽出所有HTML标记,放入占位符之类 “[[[tag1]]] balha blah blah [[[tag2]]]”然后对剩余的文本进行替换,然后将代码替换回来