突出显示查询中的搜索词?

时间:2011-11-06 21:48:57

标签: php sql highlighting

我在查询中突出显示搜索字词时遇到问题。如果用户搜索“耶稣”,则所有包含“耶稣”的经文都将被列出并分页。我想在所有这些段落中突出显示搜索查询。

假设我在搜索“耶稣”,并且会弹出大约10节经文,我希望每一页上的所有耶稣实例都能突出显示。

我的PHP代码:

索引:http://pastebin.com/vTdy79er
圣经数据库:http://www.mediafire.com/?00x4fnbn1vr4nch

我不知道该怎么做。

我的查询选择语句:

$searchResult = $dbLink->prepare("SELECT   bsect, bname, bnum, cnum, vnum, vtext,                                             MATCH    (bname, vtext)
AGAINST  ('$searchQuery' IN BOOLEAN MODE)
AS       relevance
FROM     kjv
WHERE    MATCH (bname, vtext)
AGAINST  ('$searchQuery' IN BOOLEAN MODE)
ORDER BY relevance
DESC
$limit"); 

实际显示我的结果的代码(圣经名称章节编号:经文编号,然后是经文:

while ($searchResult->fetch())
{
print ("<span class=\"results title\">$bname $cnum:$vnum</span>");
print ("<p class=\"passage\">$vtext</p>");
}

3 个答案:

答案 0 :(得分:1)

我相信你已经在这里做了:

$output = str_replace($_GET[phrase],"<font color=red>" . $_GET[phrase] . "</font>",$output);

即使我建议改变这样的代码:

$output = str_replace($_GET['phrase'],'<font color="red">'.$_GET['phrase'].'</font>',$output);

甚至更好,使用<span>标记和类,然后将您想要的所有CSS分配给该类,以便将来更容易更改

修改/添加

使用您上次更新的消息,这是您必须要做的(如果我正确理解您的代码)

print ("<p class=\"passage\">$vtext</p>");

将其更改为(假设$searchQuery是包含搜索

的字符串的变量
echo '<p class="passage">'.(str_replace($searchQuery, '<font color="red">'.$searchQuery.'</font>', $vtext).'</p>';

我也喜欢回声而不是印刷,但个人喜好。确保你想避免使用"并尽可能使用',因为它会加速PHP,因为引擎不必解析整个字符串来查找变量..但同样,个人偏好< / p>

答案 1 :(得分:0)

试试这个。

jQuery SearchHighlight插件。提供演示和实施。

答案 2 :(得分:0)

我没有看你的代码,但是这样的东西应该有效:

echo str_replace($searchWord, '<span class="highlight">' . $searchWord . '</span>', $row['verse']);