2016-11-19 69 views
2

我正在嘗試編寫搜索和語法突出顯示。假設我們有一個基本查詢,即基於關鍵字查詢各個國家/地區,例如uni語法突出顯示,不區分大小寫的語法

現在,我正在使用Sphinx從數據庫中獲取與此關鍵字匹配的結果,並且使用不區分大小寫的搜索。結果,那個獅身人面像的回報如下:

Tanzania, United Republic of 
United Arab Emirates 
United Kingdom 
United States 
Igaunija 
Estados unidos Mexicanos 

我現在想強調這些字符串搜索關鍵詞,通過在<span>包裝的關鍵字。

要做到這一點,我試圖做到以下幾點:

$search='uni'; 
foreach($keyword as $text) { // $keyword is an array, containg each found result one by one 
    $text=str_replace($search, "<span>".$search."</span>", $text); 
} 

白衣這個代碼,只有IguanijaEstados unidos Mexicanos得到強調,因爲在所有其他情況下,關鍵字以大寫字母開頭。如果我將str_replace更改爲str_ireplace,則每個搜索關鍵字get都會突出顯示,但在前幾個條目中,大寫U被替換爲小寫u,因此從United Kingdom開始,我得到united Kingdom。我怎樣才能突出顯示搜索關鍵字,並維護結果中的字符大小寫?

我期望的結果會是這樣的:

Tanzania, <span>Uni</span>ted Republic of 
<span>Uni</span>ted Arab Emirates 
<span>Uni</span>ted Kingdom 
<span>Uni</span>ted States 
Iga<span>uni</span>ja 
Estados <span>uni</span>dos Mexicanos 
+0

什麼'$ search'的內容? '$ keyword'的內容是什麼?你爲什麼要將'$ keyword'複製到'$ text'中? –

+0

$ search是** uni **,並且$關鍵字是從找到的單詞列表中按順序排列的每個單詞。 –

+2

使用'preg_replace()'。然後,您可以使用替換中的$ 0來從原始文本中獲取文本,以便保留大小寫。 – Barmar

回答

3

您可以使用正則表達式,這將允許您保留源字符串的情況。

<?php 

$unis = <<< UNIS 
Tanzania, United Republic of 
United Arab Emirates 
United Kingdom 
United States 
Igaunija 
Estados unidos Mexicanos 
UNIS; 

var_dump(preg_replace('/(uni)/i','<span>$1</span>',$unis)); 

輸出

string(190) "Tanzania, <span>Uni</span>ted Republic of 
<span>Uni</span>ted Arab Emirates <span>Uni</span>ted Kingdom 
<span>Uni</span>ted States Iga<span>uni</span>ja Estados 
<span>uni</span>dos Mexicanos" 
+0

是的,這是訣竅,謝謝!:) –