StormMan
Новичок
Правильная обрезка слов
Всем привет!
Есть в smarty такой плагин, modifier.truncate.php. Изначально он вот такой:
Проблема этого кода в том, что он неправильно работает с кодировкой utf-8, если символы отличаются от латиницы, и исходит эта проблема из-за того, что с многобайтными символами функция substr работать не умеет. Заменяю её на mb_substr:
Остаётся одна проблема: слова обрезаются посередине, получается ерунда вроде "Слова обрезаются посе...". Подскажите, какие функции можно применить, чтобы текст обрезался правильно: "Слова обрезаются посередине...".
Буду очень благодарен за примеры!
Всем привет!
Есть в smarty такой плагин, modifier.truncate.php. Изначально он вот такой:
PHP:
<?php
function smarty_modifier_truncate($string, $length = 80, $etc = '...',
$break_words = false, $middle = false)
{
if ($length == 0)
return '';
if (strlen($string) > $length) {
$length -= strlen($etc);
if (!$break_words && !$middle) {
$string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1));
}
if(!$middle) {
return substr($string, 0, $length).$etc;
} else {
return substr($string, 0, $length/2) . $etc . substr($string, -$length/2);
}
} else {
return $string;
}
}
?>
PHP:
<?php
function smarty_modifier_truncate($string, $length = 80, $etc = '...',
$break_words = false, $middle = false)
{
if ($length == 0)
return '';
if (mb_strlen($string, utf8) > $length) {
//if (strlen($string) > $length) {
$length -= mb_strlen($etc, utf8);
//$length -= strlen($etc);
if (!$break_words && !$middle) {
$string = mb_ereg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length+1, utf8), utf8);
//$string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1));
}
if(!$middle) {
return mb_substr($string, 0, $length, utf8).$etc;
//return substr($string, 0, $length).$etc;
} else {
return mb_substr($string, 0, $length/2, utf8) . $etc . mb_substr($string, -$length/2, utf8);
//return substr($string, 0, $length/2) . $etc . substr($string, -$length/2);
}
} else {
return $string;
}
}
?>
Буду очень благодарен за примеры!