Проблема с принятым ответом состоит в том, что строка результата выходит за предел, то есть она может превышать 100 символов, поскольку strpos
будет выглядеть как после смещения, и поэтому ваша длина всегда будет превышать ваш предел , Если последнее слово длинное, как squirreled
, то длина вашего результата будет 111 (чтобы дать вам представление).
Лучшее решение - использовать функцию wordwrap
:
function truncate($str, $length = 125, $append = '...') {
if (strlen($str) > $length) {
$delim = "~\n~";
$str = substr($str, 0, strpos(wordwrap($str, $length, $delim), $delim)) . $append;
}
return $str;
}
echo truncate("The quick brown fox jumped over the lazy dog.", 5);
Таким образом, вы можете быть уверены, что строка обрезана ниже вашего предела (и никогда не переходит)
P.S. Это особенно полезно, если вы планируете хранить усеченную строку в вашей базе данных с фиксированным столбцом типа VARCHAR (50) и т. Д.
P.P.S. Обратите внимание на специальный разделитель в переносе слов. Это сделано для того, чтобы убедиться, что ваша строка правильно обрезана, даже если она содержит символы новой строки (в противном случае она будет обрезана при первой строке, которая вам не нужна).