В базе имеется тексты блогов, которые пишут пользователи. Хочу обрезать первый параграф текста чтобы сделать из него анонс.
Сперва я резал так
$ans=$row['Blogtext'];
for ($length=300; $ans[$length]!==' ' and $length; $length--){
$ans = substr($row['Blogtext'], 0, $length).'...';
};
Это решение просто обрезало текст, не обращая внимание закончилось предложение или параграф или нет.
Далее я решил резать не по пробелу а по последней найденной точке, чтобы по крайней мере, предложения были завершенными. И тут я подумал, а что, если пользователь введет длинный текст без точек...
Идеально бы было, если бы пользователи делили текст по параграфам, и тогда можно было бы просто вывести первый параграф этого текста.
Так собственно в чем вопрос - нельзя ли как-нибудь проанализировать, делится ли текст на параграфы, если да, то вывести первый параграф, не смотря на количество символов, если же параграфов нет, то просто вывести первые несколько предложений, чтобы общий объем анонса не превышал заданного количества символов, и при этом чтобы все эти проверки не сильно грузили скрипт.
То есть мне сперва нужно определить есть ли в тексте символ переноса, если он есть, обрезать текст до него, если же его нет, то применить обрезку до последней точки, входящей в допустимую длину анонса? А попроще никак нельзя? Регулярным выражением там каким-нибудь? Или я чего-то не понимаю...?
Смотри двойной перенос, потом считай сколько от начала текста до этой точки символов. Если устраивает, то отрезаем все, что после. Если много, то дели то, что осталось по точкам. И смотри сколько там символов. Если там нет ни точек ни абзацев то дели по запятым если они есть. Если нет ничего то обрезай по кол-ву символов.
Нет в моем случае не подойдет. Это на хабре пользователи поймут что такое тег more а люди гуманитарии которые будут вести уютный бложик на моем скрипте далеки от понимания что такое вообще тег и как его вставлять. Тем более им лениво совершать лишнее движение по вставке этого тега. Именно поэтому мне и нужно чтобы резалось автоматом из текста.