PHP: поисковая подсветка слов - PullRequest
1 голос
/ 11 марта 2010

Я работаю над простой поисковой системой для газетного приложения. Когда пользователь вводит ключевое слово, отображается страница результатов, выделяя термин цветом.

Я сейчас делаю это:

$title = str_ireplace($term, "<span class='highlight'>$term</span>", $note->Title);

Отлично, str_ireplace() выполняет поиск без учета регистра, но когда регистр не соответствует заметке (то есть пользователь ищет «ДЕНЬГИ», а в заметке говорится «деньги»), это происходит:

malvinas | Resultados de la búsqueda

   1. malvinas: Argentina va a la ONU y Londres se enfurece » en Actualidad  
      [...] Naciones Unidas, Ban-Ki Moon, ante quien reiterará que se cumplan las
resoluciones de la ONU sobre el tema de la soberanía de las Islas [...] 

Первоначальное название записки: «Мальвинские острова: Аргентина по-английски» (не «Мальвинские острова» и т. Д.)

Как сделать выделение без изменения исходного слова CaSe?

Ответы [ 2 ]

2 голосов
/ 11 марта 2010

Используйте регулярное выражение:

$term = 'hello';
$str = 'Hello there';
$term_escaped = preg_quote($term);
$out = preg_replace("~$term_escaped~i", '<b>\0</b>', $str);

echo $out;

Выход:

<b>Hello</b> there
1 голос
/ 11 марта 2010

Вы должны использовать обратных ссылок , с модификатором без учета регистра. Таким образом, когда вы заменяете слово, вы заменяете его на себя (сохраняя его регистр), а не заменяете его на тот, который был использован при поиске.

Использование этого метода с preg_replace позволит вам передать массив поисковых терминов и общий шаблон замены для каждого.

...