Как сократить текст через PHP в стиле поисковых систем

« Предыдущая запись
 
  Следующая запись »
 

find Как сократить текст через PHP в стиле поисковых систем Иногда для сайтов нужен свой простой поисковый механизм. Механизм это хорошо, но он состоит из различных частей. И вот сегодня мы рассмотрим одну из них.

Допустим у нас страницы хранятся в базе данных. Когда делается поисковый запрос, обращение идёт к базе, и если обращение успешно, то изымается содержимое страницы. И вот дальше нужно выбрать участок текста с найденным словом/фразой, чтобы человек смог сориентироваться - то он нашёл или нет. Как это делается?

<?
$find = 'Искомое слово';
$symbolls = '80';
$search_text = 'Переменная с туевой хучей текста, содержащая "Искомое слово"';
$search_text = strip_tags($search_text, '<br><strong>');
$search_txt_length = strlen ($search_text);
$search_first_enter = strpos (strtolower($search_text), strtolower($find));
$pad_left = $search_first_enter-$symbolls;
$pad_right = $search_first_enter+$symbolls+5;
if ($pad_right>$search_txt_length) $pad_right = $search_txt_length;
if ($pad_left<0) $pad_left = '0';
$search_text = substr($search_text, $pad_left, $pad_right);
$fst_nbsp = strpos($search_text, " ");
$lst_nbsp = strrpos($search_text, " ");
$search_text = substr($search_text,$fst_nbsp,$lst_nbsp-$fst_nbsp);
$search_text = str_replace (strtolower($find),"<b>".strtolower($find)."</b>",strtolower($search_text));
?>
<div><b>...</b> <?=$search_text?> <b>...</b></div>
  1. Строка 2. Переменная $find содержит искомое слово или фразу.
  2. Строка 3. Переменная $symbolls. Количество символов, которое будет взято из текста до искомого слова и после.
  3. Строка 4. Переменная $search_text. В ней хранится извлечённый из базы текст страницы.
  4. Строка 6. Убираем из записи все HTML-теги, кроме тега переноса строки - br и тега толстого шрифта - strong. Можно добавлять и другие теги, но я на самом деле даже бы убрал один тег, а именно стронг. Дело в том, что если не усложнить код, то может возникнуть случай, когда после обрезания текста останется только открывающий тег, а закрывающего не будет, и в итоге всё будет плохо, например, всё жирное. Желающие могут к коду дописать несколько строк проверки на нужные теги, но думаю оно того не стоит=).
  5. Строка 7. В переменной $search_txt_length хранится длина всего текста страницы.
  6. Строка 8. Переменная $search_first_enter - номер символа в тексте, который показывает первое вхождение искомого слова. Применена функция strtolower, чтобы исключить влияние регистра на поиск.
  7. Строки 10-11. Переменные $pad_left и $pad_right. Номера символов в тексте, которые предшествуют символу первого вхождения искомого слова ($search_first_enter), и идут после самого слова. Собственно эти две переменных и определяют откуда до куда будет выведена фраза. В отступе справа добавлено пять символов - компенсация за то, что отступ справа ведётся не с конца искомого слова/фразы, а с начала. Конечно, можно ввести переменную длины искомой фразы и тут её использовать, но это усложнит обучающий код. Энтузиастам флаг в руки=).
  8. Строки 12-13. Поправки к двум предыдущим переменным. Ведь вдруг мы отсчитаем символы так, что будут минусовые или превышающие значения? Делаем две проверки.
  9. Строка 14. УРА! Обрезаем искомый текст до нужного нам размера при помощи функции substr.
  10. Строки 15-17. Текст обрезали, но почти наверняка там будут обрезаны некоторые слова. Поэтому надо обрубить эти обрубки слов. Сначала ищем вхождения первого и последнего пробелов при помощи функций strpos и strrpos, которые отличаются только тем, что первая ведёт поиск с начала строки, а вторая - с конца. Обращаем внимание на функцию substr, а точнее на третье значение, которое она принимает (до куда обрубать). Оно идёт с вычетом первого, так как сначала обрубается первая часть, а потом исходя из неё обрубается вторая часть.
  11. Строка 18. Ну и теперь находим в обрезанном участке нужный кусок фразы и выделяем его жирным, мы же его искали, не так ли?
  12. Строка 22. Выводим всё хозяйство пользователю.

Скачать данный код можно архивом

 

 

В заключении

Так что ничего сложного нет. При желании можно код совершенствовать и дописывать. Возможно где-то я использовал не самые простой способ достижения чего-либо, однако это делает также наглядным пример работы с функциями обработки текстовых строк на PHP. В общем пользуйтесь на здоровье=).

,

1 звезда2 звезд3 звезд4 звезд5 звезд (голосов: 1, средний: 5.00 из 5)
Понравилась статья или журнал? Подписывайся на продолжение!
Отзывов: 8 на запись

"Как сократить текст через PHP в стиле поисковых систем"

  1. Опробовал, хорошая штука. Спасибо=)

  2. Всегда пожалуйста=)

  3. Для таких задач придумали регулярные выражения.

    echo preg_replace('/(.{0,'.$symbolls.'})('.$find.')(.{0,'.$symbolls.'})/i', '$1$2$3', $search_text);

    Это грубое приближение, но суть, думаю, ясна. Ваш код можно сократить в пять раз.

  4. Сайт съел html-теги, присутствующие в коде.
    $1$2$3 следует читать как $1$2$3 (без пробелов)

  5. опять съел =)

  6. Александр Шуйский
    26/01/2010 at 10:28 Постоянная ссылка Цитировать

    Хммм, понятно, действительно можно код как следует сократить, не используя кучу строковых функций. Когда писал код, так и думал, что чего-то упускаю и что есть более простой вариант=).
    Спасибо за инфу, всегда приятно получать указатель в другую сторону, чтобы заметить то, что было пропущено.

  7. Пример хотелось бы увидеть

  8. код из журнала залил в архиве – чтобы не заморачиваться с заменой кавычек – можно качать, линк в тексте

Добро пожаловать, коллега! Вы можете оставить свой отзыв:





Допустимые XHTML-теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Подписка на комментарии