PHP : Как обрезать текст до определенной длины?
Подобный текст используется в качестве краткого описания к статьям или постам. CMS предоставляют нам готовые решения для подобного рода задач, но почему бы не посмотреть на то, как сделать это самому. Данную задачу можно решить следующим кодом PHP...
Подобный текст используется в качестве краткого описания к статьям или постам на сайтах.
CMS предоставляют нам готовые решения для подобного рода задач, но почему бы не посмотреть на то, как сделать это самому. Данную задачу можно решить следующим кодом PHP...
Допустим мы имеем следующий текст содержащий BB коды:
$hometext = "Уважаемые друзья и коллеги! [center]В честь профессионального праздника - [b]Дня программиста[/b], приглашаем Вас принять участие в конкурсе! Дарим прекрасную [b]возможность выиграть участие в осеннем профессиональном Форуме![/b] - [url=http://Forum.Help1C.com]http://Forum.Help1C.com[/url][/center] [u]Участники конкурса, правильно ответившие на вопросы, станут победителями и получат призы:[/u] > Первый, третий и пятый участник : [color=orangered]билет на участие в осеннем Форуме[/color] > Второй и четвертый : промо-код [color=orangered]на Скидку в 50%[/color] > Шестой : промо-код на [color=orangered]Скидку в 35%[/color] > Седьмой : промо-код на [color=orangered]Скидку в 25%[/color] > Восьмой : промо-код на [color=orangered]Скидку в 20%[/color] > Девятый : промо-код на [color=orangered]Скидку в 15% [/color] > Десятый : промо-код на[color=orangered]Скидку в 10% [/color] [b][i]Конкурс продлится до 13.09.2013.[/i] [/b] [u][i]Победители будут определяться на основании точности и скорости предоставления ПРАВИЛЬНЫХ ответов[/i][/u] [hr]";
Первым делом мы обрежем до 1000 символов, преобразуем bb в html и уберём все html элементы:
$hometext = substr($hometext, 0, 1000); $hometext = str_replace("[", "<", $hometext); $hometext = str_replace("]", ">", $hometext); $hometext = strip_tags($hometext);
Затем убедимся, что текст не заканчивается восклицательным знаком, запятой, точкой или тире:
$hometext = rtrim($hometext, "!,.-");
Напоследок находим последний пробел, устраняем его и ставим троеточие:
$hometext = substr($hometext, 0, strrpos($hometext, ' '))."...";
Часто бывает что надо сохранить переносы строк, тогда добавим:
$hometext = nl2br($hometext);
Выводим
echo $hometext."… ";
Результат будет такой:
Уважаемые друзья и коллеги! В честь профессионального праздника - Дня программиста, приглашаем Вас принять участие в конкурсе! Дарим прекрасную возможность выиграть участие в осеннем профессиональном Форуме! - http://Forum.Help1C.com Участники конкурса, правильно ответившие на вопросы, станут победителями и получат призы: > Первый, третий и пятый участник : билет на участие в осеннем Форуме > Второй и четвертый : промо-код на Скидку в 50% > Шестой : промо-код на Скидку...
Универсальная функция для “умного” обрезания строки
до выбранного лимита без дробления слов на PHP:
function SmartCutting($source, $limit) { $words_array = explode(' ', $source); $short = ''; for ($i=0; $i < count($words_array); $i++) { if ( mb_strlen($short, 'utf-8') <= $limit ) { $short .= $words_array[$i] . ' '; } } $short = trim($short); if ( mb_strlen($short, 'utf-8') <= $limit - 10 ) { $return = $source; } else { $return = "<a href="http://w1c.ru/#full">{$short} ...</a>"; } return $return; }