Я думаю, много у кого из начинающих программистов возникала необходимость обрезать новость для вывода сокращенной версии новости, страницы, статьи, описания товара в каталоге или любых других данных при том условии, что контент, что нужно обрезать имеет 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:
Это текст первой новости со ...
Как видно, получилось именно то, что нам и требовалось: обрезка текста с очищением от тегов, чтобы наш сокращенный текст не «поплыл». Если у вас остались вопросы, или есть предложения по улучшению статьи — можете написать их в комментариях, постараюсь ответить на них =)