2010-12-14 37 views
5

所以我正在爲註釋做一個搜索功能。其他人在這裏幫助我SQL query。 我還想要做的是在結果中突出顯示搜索查詢文本。PHP - 突出顯示來自包含HTML的字符串的文本

結果以HTML形式存儲在$variable中。 例如,如何將搜索查詢文本包裝在<span>標記中,而不會弄亂html。

例如。搜索查詢可以foo bar和輸出可以看起來像:

<p>bla bla foo bar bla</p> 

所以它應該是這樣的:

<p>bla <span class="highlight">foo bar</span> bla bla</p> 

回答

2

我覺得這是比它更復雜的外觀。如果我們正在尋找foo bar然後

<p>bla bla foo bar bla</p> 

將被轉換成

<p>bla <span class="highlight">foo bar</span> bla bla</p> 

但對於一些特殊情況?這可能是foo bar是一個HTML標籤中匹配:

<p>bla bla <span class="foo bar">foo bar</span> bla</p> 

將被替換爲

<p>bla <span class="<span class="highlight">foo bar</span>">foo bar</span> bla bla</p> 

我說得對這個?我沒有遇到過這個問題,但我建議你在Text助手中檢查CakePHP的文檔(是的,我知道你沒有使用該框架),highlight()方法可以正確處理HTML標記。看看源代碼,給它一個鏡頭,如果它適合你,請繼續並複製它。

+1

是的,這種情況可能會發生。我應該在問題中提到這一點。無論如何,我發現一個更簡單的解決方案,使用jQuery! :d – Alex 2010-12-14 21:24:06

1
$searchString = 'foo bar'; 
$searchResult = '<p>bla bla foo bar bla</p>'; 

var_dump(str_replace($searchString, '<span>'.$searchString.'</span>', $searchResult)); 

var_dump(preg_replace('/'.$searchString.'/', '<span>'.$searchString.'</span>', $searchResult)); 
1

如果您確保搜索詞本身不包含任何HTML,你可以直接在"<span>"的幫助下將其包裝在str_replace()的幫助下。

請注意,這是通過字符串函數處理HTML的非常罕見的場合之一本身

如果搜索項可以包含HTML(即高亮區可以跨越標籤邊界),事情就會變得複雜得多,而且您不會像上面那樣使用巧妙的快捷方式。

+1

還有另一個問題。例如。輸出可以有'',然後標記分解.. – Alex 2010-12-14 20:51:23

+0

@Alex:這是真的,這正是使用基本字符串操作通常被認爲是使用HTML的禁止的原因。如果這種簡單化的方法可行或不可行,這取決於您的數據。如果評論可以包含*任何* HTML,那麼你很快就會處在「更復雜」的角落。 – Tomalak 2010-12-14 22:27:17

7

簡單的查找和替換:

$resultHTML = str_replace($searchString, '<span class="highlight">'.$searchString.'</span>', $resultHTML); 
+1

http://php.net/manual/en/function.str-replace.php – 2010-12-14 20:49:57

+4

別忘了還有一個不區分大小寫的版本... str_ireplace – jocull 2010-12-14 20:54:36

+0

不錯的一個...我發現了 – 2011-12-20 12:29:21

2
<?php 

$result = "<p>Bla bla foo bar bla bla test x x x</p>"; 

$query = "foo bar"; 

// The important point here is, USE single quote (') in replacement part!! 
echo preg_replace("/($query)/", '<span class="highlight">${1}</span>', $result); 
+1

你可以使用double也引用,只是要逃脫他們。欲瞭解更多信息 - http://en.wikipedia.org/wiki/Escape_character – jolt 2010-12-14 21:27:04

+0

謝謝..這就像魅力meee ... – 2014-09-14 12:15:53

1

我有同樣的問題,但我發現this

的代碼被編譯,隨意改變高亮顏色,但是這是通過一個函數來完成,所以很容易修改使用一種顏色:

 $color = '#FCB514'; //self::generate_colors(); 

First Post!

0

text-shadow:1px 1px 1px#FCD600;

相關問題