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

Ale*_*lex 4 php string truncate utf-8

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

ale*_*lex 11

假设mb_*安装了功能.

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

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

  return mb_substr($str, 0, $length) . $append;
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

CodePad.

如果第三个参数是,它将保留所有字母字符,直到第一个非字母字符TRUE.