это решение не будет сокращать слова, оно добавит три точки после первого пробела.
Я отредактировал решение @ Raccoon29 и заменил все функции функциями mb_ , чтобы они работали для всех языков, таких как арабский
function cut_string($str, $n_chars, $crop_str = '...') {
$buff = strip_tags($str);
if (mb_strlen($buff) > $n_chars) {
$cut_index = mb_strpos($buff, ' ', $n_chars);
$buff = mb_substr($buff, 0, ($cut_index === false ? $n_chars : $cut_index + 1), "UTF-8") . $crop_str;
}
return $buff;
}