Выделение найденного в результатах поиска

shp

Guest
Выделение найденного в результатах поиска

Есть небольшая проблемка.
Я делаю поиск по базе товаров магазина. Делаю такой запрос к БД:
Код:
SELECT .... WHERE 'pole1' LIKE '%keyword1%' OR 'pole1' LIKE '%keyword2%' ...;
Затем в данных, полученных от БД, заменяю keyword1, keyword2... на <span class="">keyword1</span>, <span class="">keyword2</span> и т.д. с помощью preg_replace (для выделения найденного цветом).
Все работает превосходно, но только если несколько ключевых слов не входят в какое-либо слово из полученных данных "с перекрытием". Например, слово в данных - книга. Ключевые слова - "книг" и "гать". В этом случае цветом будет выделено только слово "книг", т.к. после первой замены в данных будет не "гать", а <span class="">г</span>ать. Понятно, что такое встречается редко (такие фрагменты сами должны быть словами, не будут же набирать в строке поиска всякую чушь), но все же...
Посоветуйте, как это лучше сделать. Хотел попробовать определить расположение нужных фрагментов с помощью strpos() и загонять эти числа в массив, а потом заменять все сразу, но strpos() - регистрозависимая функция.
Есть ли регистронезависимый аналог ф-ии strpos()? Или, может быть, какой-нибудь хитрый режим для preg_replace, чтобы при замене не учитывались определенные символы (</span>)?
 

shp

Guest
Re: Re: Выделение найденного в результатах поиска

В том то весь фокус, что stripos() у меня не работает.
Код:
Fatal error: Call to undefined function: stripos() in...
Не подскажете, в чем проблема? Apache 1.326 + PHP 4.39 (как модуль), все это под WinXP.
 

shp

Guest
А аналога в PHP4 нет? Дома я то, конечно, могу поставить 5-ый, а в Инете он пока что мало где стоит.
 

shp

Guest
Мне нужно определить ПОЛОЖЕНИЕ символов в строке, забить все в массив, а в конце заменить все сразу с помощью preg_replace. Я же все объяснил в своем первом посте.
 

shp

Guest
Originally posted by sakon
sorry.
А код замены можно увидить?
$mas_to_output['title'] = preg_replace ($mas_keywords_for_repl,"<span class=\"foundKeywords\">$1</span>", $mas_to_output['title']); - это вариант, когда заменяется только один фрагмент. $mas_keywords_for_repl - массив с ключевыми словами, $mas_to_output['title'] - данные для вывода (получены из БД).
 

sakon

П..и.н..ок
Ну "регистрозависимость" можно обойти :

PHP:
$mas_keywords_for_repl_temp[$i] =  strtolower($mas_keywords_for_repl[$i]);
И получай позиции из $mas_keywords_for_repl_temp.
Незабудь и strtolower к $keyword


Хочу правда обратить внимание:
<span>Кни<span>г</span>ать</span>

не будут же набирать в строке поиска всякую чушь
М...да.
 
Сверху