Я прошу прощения за воскрешение этого вопроса, но я наткнулся на эту тему и обнаружил небольшую проблему. Для тех, кто хочет ограничить количество символов, которые уберут слова, которые превышают заданный лимит, вышеприведенные ответы отлично подойдут. В моем конкретном случае мне нравится отображать слово, если лимит находится в середине указанного слова. Я решил поделиться своим решением на тот случай, если кому-то еще нужна эта функциональность и ему нужно добавить слова вместо того, чтобы их обрезать.
function str_limit($str, $len = 100, $end = '...')
{
if(strlen($str) < $len)
{
return $str;
}
$str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str));
if(strlen($str) <= $len)
{
return $str;
}
$out = '';
foreach(explode(' ', trim($str)) as $val)
{
$out .= $val . ' ';
if(strlen($out) >= $len)
{
$out = trim($out);
return (strlen($out) == strlen($str)) ? $out : $out . $end;
}
}
}
Примеры:
- Ввод:
echo str_limit('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', 100, '...');
- Выход:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore...
- Ввод:
echo str_limit('Lorem ipsum', 100, '...');
- Выход:
Lorem ipsum
- Ввод:
echo str_limit('Lorem ipsum', 1, '...');
- Выход:
Lorem...