在PHP中缩短/截断UTF8字符串

时间:2011-04-24 06:24:34

标签: php string utf-8 truncate

我需要一个良好的快速功能,可以通过UTF8支持将字符串缩短到设定的长度。在末尾添加尾随'...'是一个加号。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:11)

假设安装了mb_*个功能。

function truncate($str, $length, $append = '…') {
  $strLength = mb_strlen($str);

  if ($strLength <= $length) {
     return $str;
  }

  return mb_substr($str, 0, $length) . $append;
}

CodePad

请记住,这将添加一个字符(省略号)。如果您希望$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,它将保留所有字母字符到第一个非字母字符。

答案 1 :(得分:2)

我猜你需要截断文字,所以这可能会有所帮助:

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刚发布的那样,但它不会破坏文字。

答案 2 :(得分:0)

试试这个:

$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")." ...";}

干杯...