корректный разрыв предложения

five

Новичок
корректный разрыв предложения

Есть предложение:

"Нет лучшей рекламы для какого-либо продукта, нежели огромный скандал, желательно с привлечением тяжелой артиллерии в виде адвокатов и суда. В CША разгорается скандал вокруг элегантных сумочек Jelly Kelly, названных так в честь покойной принцессы Монако Грейс Келли. "

Нужно из этой фразы выбрать первые 150 символов. У меня получилось следующее:

"Нет лучшей рекламы для какого-либо продукта, нежели огромный скандал, желательно с привлечением тяжелой артиллерии в виде адвокатов и суда. В CША разг..."

Как видно, слово "разгорается" обрезалось нехорошо.

Как сделать так, что бы разрыв предожение проходил не по середение слова, а по пробелу/запятой/точке, если такие знаки есть в полученных 150 символах?

Заранее спасибо.
 

Popoff

popoff.donetsk.ua
Простого способа, похоже нету. Предлагаю алгоритм:
1. Режем все, что за пределами 150-символов
2. Смотрим, какой первый символ отрезали
3. Если это не был разрыв слова, то дорезаем кусок слова регулярным выражением типа /^(.*)\w+\W*/
Либо вместо регулярного выражения испльзовать поиск в обратном направлении [m]strrpos[/m]. Но тогда нужно будет искать для каждого символа, который может встретиться между словами.
 

five

Новичок
может это и по детски, но я сделал так:

$phead=substr($phead,0,150);
$pos=strrpos($phead," ");
$phead=substr($phead,0,$pos)."...";

вроде работает :)
 

Фанат

oncle terrible
Команда форума
режь в том, в каком тебе надо, и никого не слушай.
 

pupkin

Guest
2 файв

Ладно, это не принципиально.. хочешь ходить задом как рак, ходи.. :)
В твоём коде ты не предусмотрел вот какую вешь - что будет, если в тексте не окажется пробелов? :) Ась?
 

five

Новичок
в тексте не может не быть пробелов, а если такое окажется, то, ну и что, значит так кому-то нужно и этот кто-то получит обрезанную строку в 150 символов...
 

Linker

Guest
Фанат, спасибо за совет ! (с) five
Вот что получилось:

$text = 'Нет лучшей рекламы для какого-либо продукта, нежели огромный скандал, желательно с привлечением тяжелой артиллерии в виде адвокатов и суда. В CША разгорается скандал вокруг элегантных сумочек Jelly Kelly, названных так в честь покойной принцессы Монако Грейс Келли.';
$limit = 150;
$pos = strpos($text, ' ', $limit);
$result = substr($text, 0, $pos);
echo $result;
 

pupkin

Guest
Т-а-а-к.. Теперь с Linker'ом..

1. Перечитай 4 поста выше твоего.
2. А что, если текст окажется короче, чем твой $limit. Ась? :)
 

Linker

Guest
pupkin:

это не моя проблема, а five,
предусмотреть это элементарно:

$limit = 150;

if ($limit < strlen($text))
{
$pos = strpos($text, ' ', $limit);
$result = substr($text, 0, $pos);
}
else
{
$result = $text;
}
echo $result;

Но есть ещё масса условий (их можно кучу придумать), например если не встретится не одного пробела во всём оставшемся тексте.
Это уже пусть five решает, надо ему предусмотреть что-то ещё или нет.
 

pupkin

Guest
Я это к тому, чтобы человек не сделал тупо копи-пэйст, а попытался посмотреть на проблему шире :)
 
Сверху