Обрезка контента для вывода сокращенной версии на PHP

Я думаю, много у кого из начинающих программистов возникала необходимость обрезать новость для вывода сокращенной версии новости, страницы, статьи, описания товара в каталоге или любых других данных при том условии, что контент, что нужно обрезать имеет HTML разметку. Именно потому я хотел бы немного упростить головоломку и направить в нужном направлении в решении этого вопроса.

Начнем с основы, к примеру у нас имеется некоторый контент, новость что нужно обрезать до сокращенной новости:

HTML:

Это текст первой
новости со <a href="http://alexdev.ru">ссылкой</a>
внутри, поздравляем!

Для обрезки текста выше, который мы присвоим переменной $text, к примеру, мы можем использовать функцию mb_substr()

PHP:

// Обрезаем длину текста
$short=mb_substr($text,0,80);

// Выводим результат
echo $short;

Тогда на выходе мы получим следующий результат:

HTML:

Это текст первой
новости со

Конечно же, такой вывод приведет к тому, что все что ниже этой обрезки у нас «поплывет».

Какой выход из этой ситуации вижу я. Мы обратимся к функции php под названием strip_tags().

Данная функция очищает строку от всевозможных тегов, но в параметрах можно указать исключения, какие теги убирать не стоит, покажу на примере:

PHP:

// Присваиваем текст переменной $text
$text='
Это текст первой
новости со <a href="http://alexdev.ru/">ссылкой</a>
внутри, поздравляем!
';

// Очищаем текст от тегов
$short=strip_tags($text);

// Выводим результат
echo $short;

В итоге на выходе мы получим:

HTML:

Это текст первой
новости со ссылкой
внутри, поздравляем!

Как видно, все теги, кроме переноса, что мы указали в исключениях функции пропали, что нам и нужно было. Теперь можно совместить обе функции сразу:

PHP:

// Присваиваем текст переменной $text
$text='
Это текст первой
новости со <a href="http://alexdev.ru">ссылкой</a>
внутри, поздравляем!
';

// Применяем обе функции
$short=strip_tags(mb_substr($text,0,80));

// Добавляем троеточие в конце
$short.='...';

// Выводим результат
echo $short;

И в итоге на выходе мы получаем следующий результат:

HTML:

Это текст первой
новости со ...

 

Как видно, получилось именно то, что нам и требовалось: обрезка текста с очищением от тегов, чтобы наш сокращенный текст не «поплыл». Если у вас остались вопросы, или есть предложения по улучшению статьи — можете написать их в комментариях, постараюсь ответить на них =)

Автор статьи: V1RR. Категория: PHP
Дата публикации: 18.08.2015