Я нашел этот php-скрипт:
// разделим теги, чтобы не сломать любой html $ string = strip_tags ($ string);
if (strlen ($ string)> 500) {
// truncate string $stringCut = substr($string, 0, 500); // make sure it ends in a word so assassinate doesn't become ass... $string = substr($stringCut, 0, strrpos($stringCut, ' ')).'... <a href="/this/story">Read More</a>'; } echo $string;
создайте webbiedave. Теперь мой вопрос заключается в том, как я могу указать strrpos для поиска пространства или точки?
Поэтому, если я ограничу строку до 22, и если бы у меня было что-то вроде StackOverFlow, это лучший сайт когда-либо -> будет выводить StackOverFlow – это … и если бы у меня было что-то вроде http://stackoverflow.com – лучший сайт когда-либо – > будет выводиться только … потому что он не нашел пробел и длину строки> 22. Как я могу изменить этот скрипт, чтобы вырезать текст, если найти точку в строке, так что http://stackoverflow.com – лучший сайт за всю историю – -> стать http: // stackoverflow …?
Я бы проверял строку с конца, потому что вам нужно удалить неполные слова. Условие этого неполного слова заключается в том, что короткая строка не заканчивается пробелом или символом конца, таким как '!' или просто точка. Следующий cond – видеть, что знак +1 после окончания строки также является таким символом. Если это вам просто нужно, чтобы любой символ от конца до следующего места. Это можно сделать с помощью regexp (что-то похожее на / [: alfa] + $ /, вероятно, лучше было бы сделать это).
Это простой способ сделать основные вещи, но я думаю, что это хорошее начало.
ПРИМЕР того, что это могло бы быть:
function word_wrap_custom($string, $limit){ $oneWord = explode(' ', $string); if(count($oneWord) < 2 ) return $oneWord[0]; $string = substr($string, 0, $limit + 2); $endchar = substr($string, $limit, $limit + 1); $postendchar = substr($string, $limit + 1, $limit + 2); $arrAccetpEndChar = array(' ', '!', '?', ',', '.', ';', ':'); if(in_array($postendchar, $arrAccetpEndChar) || in_array($endchar, $arrAccetpEndChar)) { return $string; } else { return preg_replace('/[A-Za-z0-9]+$/', '', $string); } }
Если вы хотите разбить это, не нарушая слов, но, соблюдая ограничения строки, используйте wordwrap
вместо любого другого метода split.
$longText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut purus a tellus ultrices vulputate. Aliquam posuere facilisis elit ut adipiscing. Nunc auctor dignissim porta. Vestibulum vitae tempor augue. Nam vel odio quis quam gravida ultrices sed a arcu. Phasellus nec odio massa. Duis imperdiet rutrum mi, vitae volutpat nulla convallis quis. Donec dignissim pulvinar mauris id molestie. Duis id mauris augue, id sagittis velit. Ut justo lectus, scelerisque egestas tempor et, facilisis vitae erat. Quisque ut mattis nulla. Donec a justo quis nisi tempus ultrices. Phasellus non dui non dolor tristique tincidunt vitae imperdiet libero. Pellentesque pretium luctus sem."; $makeLine = wordwrap( $longText, 50, PHP_EOL ); echo $makeLine;
До и после: http://codepad.org/Dqz8qzAy
Если вам нужна только первая строка, возможно, в виде сводного текста, вы можете взорвать полученную строку и перенести первый результат из результирующего массива:
$longText = "..."; $makeLine = wordwrap( $longText, 50, '\r\n' ); $firstSen = array_shift( explode( '\r\n', $makeLine ) ); echo $firstSen; // Lorem ipsum dolor sit amet, consectetur adipiscing...
Это не сломает слова:
function ShortenText($text, $chars) { $chars = $chars;$text = $text." "; $countchars = strlen($text); if($countchars > $chars) { $text = substr($text,0,$chars); $text = substr($text,0,strrpos($text,' ')); $text = $text."..."; } return $text; }