Как обрезать предложение в PHP с указанным количеством символов?

Всем привет, я вывожу и обрезаю текст с помощью этого кода:

<p><?php echo mb_substr($projects['description'], 0, 100, 'UTF-8') ?></p>


Но есть одна проблема, сотый символ может быть по середине слова и соответственно обрезать это слово, а мне важно чтобы обрезало после пробела и добавило три точки в конце.
Помогите, пожалуйста)
  • Вопрос задан
  • 871 просмотр
Решения вопроса 1
Eridani
@Eridani
Мимо проходил
$text = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc,";
$text = preg_match("/^(.{100,}?)\s+/s", $text, $m) ? $m[1] . '...' : $text;

echo $text;
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Stalker_RED
@Stalker_RED
$str = "Lorem ip1sum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massages. Aenean commodo ligula eget dolor. Aenean massages. Aenean commodo ligula eget dolor. Aenean massages.";
$limit = 100;

if (mb_strlen($str) <= $limit) {
	$result = $str;
} else {
	$lastspacePos = mb_strrpos(mb_substr($str, 0, $limit), ' ');
	$result = trim(mb_substr($str, 0, $lastspacePos), '.,;&+-\//?!') . '…';
}

echo $result;

mb_strrpos — Поиск позиции последнего вхождения одной строки в другую
mb_strrpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]] ) : int

https://www.php.net/manual/ru/function.mb-strrpos.php
Ответ написан
@entermix
public static function limit_words($str, $limit = 100, $end_char = NULL)
	{
		$limit = (int) $limit;
		$end_char = ($end_char === NULL) ? '…' : $end_char;

		if (trim($str) === '')
			return $str;

		if ($limit <= 0)
			return $end_char;

		preg_match('/^\s*+(?:\S++\s*+){1,'.$limit.'}/u', $str, $matches);

		// Only attach the end character if the matched string is shorter
		// than the starting string.
		return rtrim($matches[0]).((strlen($matches[0]) === strlen($str)) ? '' : $end_char);
	}


https://github.com/kohana/core/blob/bdbe81afb5a09c...
Ответ написан
Комментировать
@Barmunk
mb_strimwidth Обрезает ровно 100 символов, последние 3 заменяет на 3 точки.

https://ideone.com/W7MY6T
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы