Обрезка текста для анонса

Анонс, превью, аннотация – это часть статьи в которой содержится краткое содержание и смысл статьи, выводится в категориях и списках. По-хорошему анонс должен писаться отдельно и хранится в отдельном поле. В случаях где анонсы не заполнены, сформировать и вывести их можно несколькими способами:

1

Функция удалят HTML разметку и урезает текст до определенного количества символов указанного в $limit, но оставляет последнее слово целым. Если в конце текста попадаются ., !, ? – они остаются как есть, в других случаях добавляется многоточие.

function preview_text($value, $limit = 300)
{
	$value = stripslashes($value);		
	$value = htmlspecialchars_decode($value, ENT_QUOTES);
	$value = str_ireplace(array('<br>', '<br />', '<br/>'), ' ', $value);
	$value = strip_tags($value);
	$value = trim($value);

	if (mb_strlen($value) < $limit) {
		return $value;
	} else {
		$value   = mb_substr($value, 0, $limit);
		$length  = mb_strripos($value, ' ');
		$end     = mb_substr($value, $length - 1, 1);

		if (empty($length)) {
			return $value;
		} elseif (in_array($end, array('.', '!', '?'))) {
			return mb_substr($value, 0, $length);
		} elseif (in_array($end, array(',', ':', ';', '«', '»', '…', '(', ')', '—', '–', '-'))) {
			return trim(mb_substr($value, 0, $length - 1)) . '...';
		} else {
			return trim(mb_substr($value, 0, $length)) . '...';
		}
		
		return trim();
	}
}

$text = '
	Текст превью (или прехедер) — это небольшой кусочек текста!
	Который «подтягивается» из тела сообщения, и обычно он отображается 
	под полями с именем отправителя и темой сообщения.
';


echo preview_text($text, 60);
echo preview_text($text, 80);
PHP

Результат

Текст превью (или прехедер) — это небольшой кусочек текста!
Текст превью (или прехедер) — это небольшой кусочек текста! Который...
2

Еще один способ – расставить в текстах разделитель, например <!--more--> (используется в WorPrees, TinyMCE) и брать текст до него. При этом вся HTML верстка остается нетронутой, но главное чтобы этот разделитель был во всех статьях.

$text = '
	Текст превью (или прехедер) — это небольшой кусочек текста! 
	<!--more-->
	Который «подтягивается» из тела сообщения, и обычно он отображается 
	под полями с именем отправителя и темой сообщения.
';

echo mb_substr($text, 0, mb_strpos($text, '<!--more-->'));
PHP

Результат

Текст превью (или прехедер) — это небольшой кусочек текста!
19.10.2018, обновлено 19.09.2019
7972

Комментарии

, чтобы добавить комментарий.

Другие публикации

Преобразование цветов в PHP
Несколько примеров как перевести цвета из HEX в RGB и обратно с помощью PHP.
15899
-1
Замена кавычек на «ёлочки» в PHP
Для форматирования текста иногда требуется заменить все кавычки в тексте на французские «ёлочки», сделать это можно с...
7133
+6
PHP транслит
PHP функции для перевода текста, ЧПУ, ссылок и имен файлов в транслит.
39974
+10
Работа с Textarea jQuery
Сборник jQuery приемов с textarea - получить содержимое, вставить значение, подсчет количества символов и строк и т.д.
53456
+3
Генерация счета на оплату PDF PHP
С помощью расширения dompdf можно легко сформировать PDF файл. По сути, dompdf - это конвертер HTML в PDF который...
65867
+33
Постраничный вывод и базы данных
В SQL запросах, для ограничения количества строк в результате используется инструкция LIMIT, например следующий вернёт...
17096
0