iwqn
@iwqn
Программист-самоучка

Как грамотно обрезать текст для анонса?

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

Сперва я резал так

$ans=$row['Blogtext'];
for ($length=300; $ans[$length]!==' ' and $length; $length--){
$ans = substr($row['Blogtext'], 0, $length).'...';
};


Это решение просто обрезало текст, не обращая внимание закончилось предложение или параграф или нет.

Далее я решил резать не по пробелу а по последней найденной точке, чтобы по крайней мере, предложения были завершенными. И тут я подумал, а что, если пользователь введет длинный текст без точек...

Идеально бы было, если бы пользователи делили текст по параграфам, и тогда можно было бы просто вывести первый параграф этого текста.

Так собственно в чем вопрос - нельзя ли как-нибудь проанализировать, делится ли текст на параграфы, если да, то вывести первый параграф, не смотря на количество символов, если же параграфов нет, то просто вывести первые несколько предложений, чтобы общий объем анонса не превышал заданного количества символов, и при этом чтобы все эти проверки не сильно грузили скрипт.

То есть мне сперва нужно определить есть ли в тексте символ переноса, если он есть, обрезать текст до него, если же его нет, то применить обрезку до последней точки, входящей в допустимую длину анонса? А попроще никак нельзя? Регулярным выражением там каким-нибудь? Или я чего-то не понимаю...?
  • Вопрос задан
  • 1417 просмотров
Решения вопроса 1
CodeByZen
@CodeByZen
php, js, my/mssql, sqlite, html, css, it-consult
Смотри двойной перенос, потом считай сколько от начала текста до этой точки символов. Если устраивает, то отрезаем все, что после. Если много, то дели то, что осталось по точкам. И смотри сколько там символов. Если там нет ни точек ни абзацев то дели по запятым если они есть. Если нет ничего то обрезай по кол-ву символов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Ну по символу переноса строки в форме можно попробовать абзац определить (если вы его сохраняете)
Ответ написан
Комментировать
MetaDone
@MetaDone
Хорошо сформулированный вопрос - 50% решения
В Wordpress для обрезки используется html-комментарий <!--more-->, в вашем случае подойдет
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы