【问题标题】:Shorten/truncate UTF8 string in PHP在 PHP 中缩短/截断 UTF8 字符串
【发布时间】:2011-08-11 18:15:42
【问题描述】:

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

【问题讨论】:

    标签: php string utf-8 truncate


    【解决方案1】:

    假设已安装 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,它将保留所有字母字符,直到第一个非字母字符。

    【讨论】:

    • 出于某种原因,这并没有缩短任何内容
    • 你不想在单词边界上打破这个吗?
    • 感谢保留文字功能
    【解决方案2】:

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

    if (!function_exists('truncate_string')) { 函数 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'); 如果($pos === 假){ return mb_substr($string, 0, $max_length, 'UTF-8').'...'; } return mb_substr($string, 0, $pos, 'UTF-8').'...'; }别的{ 返回$字符串; } } }

    这有点像@alex 刚刚发布的内容,但不会打断文字。

    【讨论】:

      【解决方案3】:

      试试这个:

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

      干杯...

      【讨论】:

        猜你喜欢
        • 2012-01-19
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 2013-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多