Предполагается, что установлено mb_*
функций.
function truncate($str, $length, $append = '…') {
$strLength = mb_strlen($str);
if ($strLength <= $length) {
return $str;
}
return mb_substr($str, 0, $length) . $append;
}
CodePad .
Имейте в виду, что это добавит один символ (elipsis).Если вы хотите, чтобы $append
было включено в длину, которая усекается, просто минус mb_strlen($append)
от длины строки, которую вы нарезаете.
Очевидно, это также нарезает середину слов.
Обновление
Вот версия, которая может дополнительно сохранять целые слова ...
function truncate($str, $length, $breakWords = TRUE, $append = '…') {
$strLength = mb_strlen($str);
if ($strLength <= $length) {
return $str;
}
if ( ! $breakWords) {
while ($length < $strLength AND preg_match('/^\pL$/', mb_substr($str, $length, 1))) {
$length++;
}
}
return mb_substr($str, 0, $length) . $append;
}
CodePad .
Это сохранитвсе буквенные символы до первого не буквенного символа, если третий аргумент TRUE
.