Как обрезать строку не разрезая слово на PHP

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Scorpion
Сообщения: 57
Зарегистрирован: Вт апр 05, 2016 7:36 am
Благодарил (а): 9 раз
Поблагодарили: 5 раз

Как обрезать строку не разрезая слово на PHP

Сообщение Scorpion » Пн июл 04, 2016 3:07 pm

Доброго времени суток! Подскажите, как можно обрезать текст, чтобы не разрезать слово? То есть, чтобы последнее слово осталось целым. Сейчас обрезаю строку по количеству символов:

Код: Выделить всё

$text = substr($text, 160);
В конце обработанного текста получается только начало слова, а это не хорошо.
Заранее спасибо.

Реклама
cefp
Сообщения: 332
Зарегистрирован: Ср окт 17, 2012 6:49 pm
Поблагодарили: 3 раза

Re: Как обрезать строку не разрезая слово на PHP

Сообщение cefp » Пн июл 04, 2016 3:56 pm

Можно обрезать полученную строку до последнего пробела:

Код: Выделить всё

$text = substr($text, 0, strrpos($text, ' ')); 
d o h o d - s - n u l y a .ru - идеи бизнеса.

Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: Как обрезать строку не разрезая слово на PHP

Сообщение Slash » Пн июл 04, 2016 4:00 pm

Scorpion, с кириллицей работаете? Если да, то лучше использовать mb_* функции:

Код: Выделить всё

$text = mb_substr($text, 160);
Найти пробел после слово, в котором находится символ, по который надо обрезать, можно так:

Код: Выделить всё

$number = mb_strpos($text, ' ', 160); 
Это поможет нам определить в каком именно месте надо "резать" строку. Теперь, когда нам известно местонахождение пробела, можем вырезать:

Код: Выделить всё

$text = mb_substr($text, 0, $number); 
Переменная $text - обрезанная строка.

Код: Выделить всё

$text   = 'Доброго времени суток! Подскажите, как можно обрезать текст, чтобы не разрезать слово? То есть, чтобы последнее слово осталось целым. Сейчас обрезаю строку по количеству символов';
$number = mb_strpos($text, ' ', 160);
$text   = mb_substr($text, 0, $number);
echo 'Количество символов в обрезанной строке: ' . $number . '<br />Текст строки: ' . $text; 
cefp, получается ваш код откидывает последнее слово, а если в строке будет намного больше символов до последнего пробела, чем 160, скажем 2500.

Аватара пользователя
Scorpion
Сообщения: 57
Зарегистрирован: Вт апр 05, 2016 7:36 am
Благодарил (а): 9 раз
Поблагодарили: 5 раз

Re: Как обрезать строку не разрезая слово на PHP

Сообщение Scorpion » Чт июл 07, 2016 8:39 am

Slash, спасибо, то что надо!
cefp писал(а):Можно обрезать полученную строку до последнего пробела
Зачем?

Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: Как обрезать строку не разрезая слово на PHP

Сообщение Slash » Сб авг 06, 2016 6:56 am

Варианты решений выше могут превышать заданное количество символов. Если заданное количество превышать ни в коем случаи нельзя, могу предложить такой вариант:

Код: Выделить всё

$text = mb_substr($text, 0, mb_strrpos(mb_substr($text, 0, 160), ' ')); 

Ответить Пред. темаСлед. тема

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость