2012-01-14 76 views
0

我有一個PHP搜索腳本,我想突出顯示用戶使用標籤搜索的關鍵字。我怎樣才能做到這一點?即時關鍵字突出顯示

我的代碼是:

if(!empty($_GET['q'])){ 
$keywords=explode(' ',$_GET['q']); 
foreach($keywords as $query){ 
$query=mysql_real_escape_string($query); 
$likes[]="keywords LIKE '%{$query}%'"; 
} 

$searchResult=mysql_query("select * from questions where ".implode('or ',$likes)."limit 1"); 
while($row=mysql_fetch_assoc($searchResult)){ 
    $results="<div class='webresult'>{$row['result']}</div>"; 
} 
} 
+0

非常相似,http://stackoverflow.com/questions/4081372/highlight-keywords-in-a-paragraph – 2012-01-14 16:12:04

回答

0

如果$row['result']不包含HTML,你可以做一個字符串替換:與<span class="highlight">keyword</span>

替換結果中的所有關鍵字一個簡單的例子:

... 
while($row=mysql_fetch_assoc($searchResult)) { 
    $res = $row['result']; 
    foreach($keywords as $kw) { 
    $res = str_replace($kw, '<span class="highlight">' . htmlspecialchars($kw) . '</span>', $res); 
    } 
    $results="<div class='webresult'>{$res}</div>"; 
} 
... 
+0

@Cosmo POSMO見Blowski的答案,但你的搜索結果是不可靠反正作爲訪問者可以例如輸入一個html標籤作爲搜索詞。 – jeroen 2012-01-14 16:11:49

+0

@Cosmo Posmo我爲mysql結果添加了完整的'while'循環。 – jeroen 2012-01-14 16:13:36

+0

@Cosmo Posmo對不起,只是使用'str_ireplace()'而不是'str_replace()' – jeroen 2012-01-14 16:41:29

0

兩種解決方案,取決於結果是否可以包含HTML。

  1. 如果結果不能包含HTML,請使用preg_replace。看到這裏:highlight multiple keywords in search

  2. 如果它可以包含HTML,那麼你將需要使用DOM解析器來分離文本和HTML。示例解析器包括Simple HTML DomDOMDocument

+0

這個答案是一個很好的開始:http://stackoverflow.com/a/4081567/582278 – 2012-01-14 16:11:26

相關問題