[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск
Arh
Решил сделать поиск.
Раньше никогда не задумывался. Как гугл при подсветке искомого слова выводит часть строки которая рядом с этим словом?

То есть, есть статья с каким то текстом, но при поиске выводится искомое слово в контексте.

Вот к примеру подсвечивает слово и еще как то вытягивает часть статьи.
user posted image

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
И на хабре также
поиск
вот как так подсвечивается искомое слово и выводятся рядом стоящие слова?

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
vital
Цитата
вот как так подсвечивается искомое слово и выводятся рядом стоящие слова?

В тексте находят искомое слово и показываеют рядом стоящие слова.

В чем проблема вообще? Код за вас написть?

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Guest
Arh
$in = 'Искомое слово может быть любым';
$in = str_replace('слово', '<b>слово</b>', $in);
echo $in;
kaww
Цитата (Arh @ 30.10.2013 - 21:31)
И на хабре также

Хабр ищет sphinx'ом, который умеет это из коробки. Вот: http://sphinxsearch.com/docs/2.0.8/api-fun...ldexcerpts.html
Игорь_Vasinsky
Guest
Цитата
str_replace

ну что же вы.. юникод в моде
strtr() наше всё

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
HErATuB
Я думаю что проще реализовать через preg_replace. Вот пример кода:

$search = array('preg_replace','кода');
$in = 'Я думаю что проще реализовать через preg_replace. Вот пример кода:';
$in = preg_replace('/('.implode('|',$search).')/', "<b>$1</b>", $in);
echo $in;
Arh
Цитата (Guest @ 31.10.2013 - 04:14)
Arh
<pre class="sh_sourceCode" rel="php"><span class="sh_variable">$in</span> <span class="sh_symbol">=</span> <span class="sh_string">'Искомое слово может быть любым'</span><span class="sh_symbol">;</span>
<span class="sh_variable">$in</span> <span class="sh_symbol">=</span> <span class="sh_function">str_replace</span><span class="sh_symbol">(</span><span class="sh_string">'слово'</span><span class="sh_symbol">,</span> <span class="sh_string">'<b>слово</b>'</span><span class="sh_symbol">,</span> <span class="sh_variable">$in</span><span class="sh_symbol">);</span>
<span class="sh_function">echo</span> <span class="sh_variable">$in</span><span class="sh_symbol">;</span></pre>

Ну с подсветкой то понятно.
Все привели пример подсветки и вывода всего сообщения, но речь о том как вывести искомое слово и рядом стоящие слова.

Если поиск в огромной статье, не нужно выводить всю статью с подсвеченным словом, а только ... слово слово слово искомое слово слово слово ...

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
Гугл спас) тема закрыта

function strchop($data,$word,$interval,$ci=true)
{
//if($ci){$position=stripos($data,$word);}else{$position = strpos($data,$word);};
$position = $ci?mb_stripos($data,$word):mb_strpos($data,$word);
//ничего нет - вернули false
if(!$position) return false;
//Определяем стартовую позицию новой строки
$start_position = $position - $interval;
//От конца слова определили конечный интервал
$end_position = $position + mb_strlen($word) + $interval;
//Если стартовая позиция отрицательная делаем в 0
if($start_position < 0) $start_position = 0;
//определяем длину новой строки
$len = $end_position - $start_position;
$length = (mb_strlen($data) > $len) ? mb_strripos(mb_substr($data, 0, $len), ' ') : $len;
//вернули результат
$kusok = '...'.mb_substr($data,$start_position,$length, 'UTF-8').'...';
return str_replace($word, "<b>".$word."</b>", $kusok);
}

echo strchop('Я думаю что проще реализовать через preg_replace. Вот пример кода:','через',20);


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.