Я вытягиваю сообщения в блоге от DB. Я хочу обрезать текст к макс. длине 340 символов.
Если сообщение в блоге является более чем 340 символами, я хочу обрезать текст к последнему полному слову и добавить '...' на конце.
E.g.
NOT: In the begin....
BUT: In the ...
Другие ответы показывают вам, как вы можете сделать текст примерно 340 символов. Если это нормально для вас, то используйте один из других ответов.
Но если вы хотите очень строгий максимум из 340 символов, другие ответы не будут работать. Вам нужно помнить, что добавление ... »
может увеличить длину строки, и вам нужно учитывать это.
$max_length = 340;
if (strlen($s) > $max_length)
{
$offset = ($max_length - 3) - strlen($s);
$s = substr($s, 0, strrpos($s, ' ', $offset)) . '...';
}
Обратите внимание, что здесь я использую перегрузку strrPOS
, которая берет смещение, чтобы начать поиск непосредственно из правильного местоположения в строке, а не сначала сокращать строку.
Увидеть его работать в Интернете: IDEONE
Вы можете попробовать использовать функции, которые поставляются с PHP, такие как WordWrap
print wordwrap($text,340) . "...";
Похоже, вы захотите сначала обрезать текст до 340 символов точно, затем найдите местоположение последнего «в строке и обрежьте до этой суммы. Как это:
$string = substr($string, 0, 340);
$string = substr($string, 0, strrpos($string, ' ')) . " ...";
Попробуйте:
preg_match('/^.{0,340}(?:.*?)\b/siu', $text, $matches);
echo $matches[0] . '...';