我在查询中突出显示搜索字词时遇到问题。如果用户搜索“耶稣”,则所有包含“耶稣”的经文都将被列出并分页。我想在所有这些段落中突出显示搜索查询。
假设我在搜索“耶稣”,并且会弹出大约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>");
}
答案 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']);