2013-05-30 2 views
0

У меня есть часть кода, которая выделяет ключевое слово в функции поиска. Вместо этого я хотел бы выделить ключевое слово, даже если оно является частью слова текста. Например, если я ищу «el» и найду слово «hello», будет отображаться как h el lo.PHP, выделить часть ключевого слова, а не целое слово

Вот код:

function highlight_keywords($content, $keywords) { 

    if (!is_array($keywords)) { 
    $keywords = explode(' ', $keywords); 
    } 
    foreach ($keywords as $keyword) { 
    if (trim($keyword) !== '') { 
     $content = preg_replace('/\b(' . preg_quote($keyword) . ')\b/i',  '<span>\1</span>', $content); 
    } 
    } 
    return $content; 
} 
+1

Выньте '\ b' слово разделители. –

ответ

0

Попробуйте это:

$content = preg_replace('/(' . preg_quote($keyword) . ')/is','<span>$1</span>', $content); 
+0

Отлично! Работает! Большое спасибо ! – NickHoot

0

Чтобы сделать это проще, вы могли бы просто использовать str_replace()

$keywords = array('el'); 
$string = 'hello world'; 

foreach($keywords as $keyword){ 
    $string = str_ireplace($keyword, '<b>' . $keyword . '</b>', $string); 
} 

// $string is now: h<b>el</b>lo world 
+0

Единственная проблема заключается в том, что слово с буквами верхнего регистра и вы заменяете его строчными буквами – lexmihaylov

+0

в этом случае, просто используйте 'str_ireplace()', версию, нечувствительную к регистру. –

+1

Извините, наверное, я не объяснил, что я имел в виду, что это эхо str_ireplace ('el', ' el', 'HELLO'); производит это: H el LO (HelLO) – lexmihaylov

Смежные вопросы