Вот функция, которую я использую для усечения строк. Как и большинство предложений здесь, он использует substr для усечения строки, но он не будет разбивать строку слова на середину:
function truncate_text($string, $min_chars, $append = ' …') {
$chars = strpos($string, " ", $min_chars);
$truncated_string = substr($string, 0, $chars) . $append;
return $truncated_rstring;
}