2010-01-22 41 views
3

如果我搜索tOm ArNfElD$variable是「Tom Arnfeld」,我在MySQL(這是不區分大小寫)中得到了LIKE的很好結果。將文本 - 不區分大小寫並使用php

如何將$variable中的匹配文本與<span></span>包裝在一起以突出顯示搜索的哪個部分與查詢匹配?我需要保留$variable的原始案例。

回答

1
$textToPrint = preg_replace("/({$variable})/i","<span class"myclass">$1</span>,$text); 

這可能有幫助

+0

grrr ...別人發佈它,而我正在寫答案 – Andreas 2010-01-22 17:51:40

+0

完美的作品! – tarnfeld 2010-01-22 17:53:58

+0

這可能是假的,你不會轉義(使用'preg_quote()')'$ variable'。 – 2010-01-22 17:54:12

0

如果您要替換整個字符串或將LIKE參數轉換爲正則表達式,並使用preg_replace()(不要忘記preg_quote()字符串),則可以使用str_ireplace()

例使用正則表達式:

$parts = explode('%', $likeQuery) 
foreach ($parts as &$innerString) { 
    $innerParts = explode('_', $innerString); 
    foreach ($innerParts as &$part) { 
     $part = preg_quote($part, '/'); 
    } 
    // always unset references when you're done with them 
    unset($part): 
    $innerString = implode('.', $innerString); 
} 
// always unset references when you're done with them 
unset($innerString): 
$regex = implode('.*?', $parts); 
$transformedString = preg_replace("/$regex/", '<span>$0</span>', $stringToTransform); 
1

我會使用正則表達式:

$text = preg_replace('~(' . preg_quote($search, '~') . ')~i', '<span>$1</span>', $text); 

還有其他的方法太像一個soulmerge suggestedstr_ireplace()):

$text = str_ireplace($search, '<span>' . $search . '</span>', $text);