2009-04-10 135 views
0

我有一種情況,即返回數據庫結果並基於搜索詞在頁面上顯示它們。這部分工作正常,但我想通過將這些搜索條件包裝在span標籤中來突出顯示。我開始編寫一個函數,在每個使用str_replace函數的結果上調用該函數,但後來我發現這也會影響HTML標記中的任何文本。有沒有人有一個功能,他們用來有效地做到這一點?我使用PHP 4. 謝謝!突出顯示搜索字詞

回答

0

如果你正在返回結果顯示它們,那麼你不應該有訪問原始數據之前,它在HTML中攪出?如果是這樣,那麼通過在那裏添加span標籤來修改原始數據。

如果你說你的原始數據可以已經有它的HTML,您可以使用正則表達式來檢測你是否是一個HTML標籤中,並使用了preg_replace,而不是str_replace函數。

其他選項:

--load結果爲DOM解析器和只能做更換葉子文本節點

上的操作 - 寫自己的解析器來跟蹤的,如果你是一個HTML標記內或不是

- 從結果中抽出所有的HTML標籤,放入 「[[[tag1]]] balha blah blah [[[tag2]]]」的佔位符,然後替換剩餘的文本,然後將您的標籤替換回

+0

preg_replace是答案。我必須使用我修改後的大小寫不敏感,如下所示:$ pattern ='/('.getSearchTerm().')/i'; – 2009-04-17 16:24:56

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); 
    } 
} 

難道不測試它,但應該是這樣的。

+0

str_replace函數是區分大小寫的。我想使用不區分大小寫的替換,但我只使用PHP4,所以我不能使用str_ireplace。 – 2009-04-17 15:24:37

相關問題