2013-07-02 165 views
1

我正在爲我的Web應用程序創建搜索引擎。現在我想突出顯示用戶搜索請求的結果。我有以下功能:在php中突出顯示單詞並返回包含突出顯示的單詞的部分

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; 

}

它運作良好,但我不希望整個文本顯示在搜索結果頁面,因爲它可以是文本的行thounds,所以我只想顯示突出顯示單詞的部分內容。

回答

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>'; 
} 
+0

? – Jamol

+0

檢查我的更新 – hek2mgl

+0

他想限制文本,而不是取代某些東西?這個函數如何防止文本長達數千個符號? – leuchtdiode