Проблема с подсветкой найленных слов

  • Автор темы BeatBox
  • Дата начала

BeatBox

Guest
Проблема с подсветкой найленных слов

Помогите, пожалуйста! Вот в коде поиска у меня есть такое:
$text = nl2br($hometext);

$text = preg_replace("/$query/i", "<SPAN class=found>\\0</span>", $text);
preg_match("/\b.{0,250}".$query.".{0,250}\b/",$text,$fragment);
$text = '...'.$fragment[0].'...';

Тоесть найденные слова должно подсвечивать.
Но слова подсвечиваються только если они в середине текста. Тоесть если найденое слово в начале - то оно не подсвечиваеться :(
получаеться что выводит так:
...SPAN class=found>Болгарская студия

"сьедаеться" знак <
 

SelenIT

IT-лунатик :)
Может, логичнее делать наоборот - сначала обрезать, потом подсветить?
 

BeatBox

Guest
и почему-то если искомыйх слов несколько и все они встречаються в тексте - то неподсвечиваеться вобще ничего :(

-~{}~ 04.04.05 01:24:

SelenIT
тогда вообще ничего не подсвечиваеться.. может я чтото не так делаю :(
 

SelenIT

IT-лунатик :)
Если $query - это искомая фраза, а слова из нее в тексте идут не подряд, то закономерно, что совпадения не будет - это к вопросу о нескольких словах.
 

BeatBox

Guest
аа..
Да все-таки query это вся фраза.

Я забыл указать что вся фраза поисковая это - $word (array)

-~{}~ 04.04.05 01:42:

кажеться получилось! Впервые сам использовал foreach
PHP:
foreach ($word as $query) {
$text = preg_replace("/$query/i", "<SPAN class=found>\\0</span>", $text);
preg_match("/\b.{0,250}".$query.".{0,250}\b/",$text,$fragment);
$text = '...'.$fragment[0].'...';
}
но всеравно теперь хоть и подсвечиваються другие слова, но перво слово так и остаеться со сьеденной <
 

SelenIT

IT-лунатик :)
А так?
PHP:
preg_match("/\b.{0,250}".preg_quote($word[0],'/').".{0,250}\b/",$text,$fragment);
foreach ($word as $cur_word) {
   $fragment[0] = preg_replace("/".preg_quote($cur_word,'/')."/i", "<SPAN class=found>\\0</span>", $fragment[0]);
}
$text = '...'.$fragment[0].'...';
Самое "лобовое" решение, которое пришло в голову сходу - ничего не гарантирую ;)
 

BeatBox

Guest
SelenIT
спасибо, заработало! БОЛЬШОЕ СПАСИБО!
Только поправил немножечко:
PHP:
 preg_match("/\b.{0,250}".preg_quote($word[0],'/').".{0,250}\b/",$text,$fragment);
foreach ($word as $query) {
$fragment[0] = preg_replace("/".preg_quote($query,'/')."/i", "<SPAN class=found>\\0</span>", $fragment[0]);
}
$text = '...'.$fragment[0].'...';
Можно ещё вопросик небольшой по поиску?
Есть очент плохое свойтво поиска моего - если написать в поиске англ. букву 'a' или сочит. 'href' ну и так даее - любой хтмл код,
то в результатах весь этот код будет "раскрыт".. ну тоесть ссылка не будет выглядеть ссылкой, а будетн написано
<a href=www.com>site</a> причем все это чудо будет подсвечено.
Я незнаю как это поправить Пробовал сделать $text = strip_tags($text) но тогда же удалаються все ХТМЛ-коды.. и поиск получаеться не очень удобным..
 

BeatBox

Guest
SelenIT
спасибо ;) все-таки решил убрать хтмл из результатов поиска... тоесть убрать хтмл из куска текста где описываеться совпадение. Спасибо ещё раз ;)
 
Сверху