Укоротить / усечь строку UTF8 в PHP - PullRequest
4 голосов
/ 24 апреля 2011

Мне нужна хорошая быстрая функция, которая сокращает строки до заданной длины с поддержкой UTF8.Добавление конечного «...» на концах является плюсом.Кто-нибудь может помочь?

Ответы [ 3 ]

11 голосов
/ 24 апреля 2011

Предполагается, что установлено 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.

2 голосов
/ 24 апреля 2011

Я думаю, вам нужно обрезать текст, так что это может быть полезно:

if (!function_exists('truncate_string')) {
    function truncate_string($string, $max_length) {
        if (mb_strlen($string, 'UTF-8') > $max_length){
            $string = mb_substr($string, 0, $max_length, 'UTF-8');
            $pos = mb_strrpos($string, ' ', false, 'UTF-8');
            if($pos === false) {
                return mb_substr($string, 0, $max_length, 'UTF-8').'…';
            }
            return mb_substr($string, 0, $pos, 'UTF-8').'…';
        }else{
            return $string;
        }
    }
}

Это что-то вроде @alex, только что опубликованное, но оно не разбивает слова.

0 голосов
/ 29 апреля 2016

Попробуйте это:

$length = 100; if(mb_strlen($text, "utf-8") > $length){ $last_space = mb_strrpos(mb_substr($text, 0, $length, "utf-8"), " ", "utf-8"); $text = mb_substr($text, 0, $last_space, "utf-8")." ...";}

Приветствия ...

...