• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mb_strimwidth()

    (PHP 4 >= 4.0.6, PHP 5, PHP 7)

    获取按指定宽度截断的字符串

    说明

    mb_strimwidth(string $str,int $start,int $width[,string $trimmarker= ""[,string $encoding= mb_internal_encoding()]]): string

    $width将字符串$str截短。

    参数

    $str

    要截短的string。

    $start

    开始位置的偏移。从这些字符数开始的截取字符串。(默认是 0 个字符)如果 start 是负数,就是字符串结尾处的字符数。

    $width

    所需修剪的宽度。负数的宽度是从字符串结尾处统计的。

    $trimmarker

    当字符串被截短的时候,将此字符串添加到截短后的末尾。

    $encoding

    $encoding参数为字符编码。如果省略,则使用内部字符编码。

    返回值

    截短后的string。如果设置了$trimmarker,还将结尾处的字符替换为$trimmarker,并符合$width的宽度。

    更新日志

    版本说明
    7.1.0支持负数的$start$width

    范例

    mb_strimwidth()例子

    <?php
    echo mb_strimwidth("Hello World", 0, 10, "...");
    // 输出 Hello W...
    ?>
    

    参见

    Note that the trimmarker removes characters from the end of the string to trim, so
    $hello = 'Lorem ipsum dolor sit amet, lorem ipsum';
    $trimmarker = '......................';
    echo mb_strimwidth($hello, 0, 20, $trimmarker);
     
    will only add the values of the trim marker, as the character number of $trimmarker is longer than the specified value to trim to, so it will return: 
     ......................
    It is therefore better to use this: 
    mb_strimwidth($hello, 0, 20). $trimmarker;
    as the trimmarker won't remove characters of the string in order to make space for itself. It will return:
    Lorem ipsum dolor si......................
    While having the option to append a string to the end is nice, you can run into the problem of having a space between the append if the width is truncated after a space. I find something like this to be more attractive in the output, although messy in the code.
    rtrim(mb_strimwidth($string, 0, 24))."..."
    <?php
    function strimwidthCenter( $value, $length = 40 ) {
      $valueEncoding = mb_detect_encoding( $value, 'auto', true );
      if ( $length >= mb_strwidth( $value, $valueEncoding ) ) {
        return $value;
      }
      $limited = '';
      $firstWidth = ceil( $length/2 );
      $secondStart = mb_strwidth( $value, $valueEncoding ) - ( $length - $firstWidth );
      $secondWidth = $length - $firstWidth +1;
      $limited = mb_strimwidth( $value, 0, $firstWidth, '...', $valueEncoding ) . mb_substr( $value, $secondStart, $secondWidth, $valueEncoding );
      return $limited;
    }
    ?>
    
    I had a problem (as in another comment) with a space being between the trailing dots and the subject being truncated. Here's how I fixed it:
    <?php str_replace( " .", ".", mb_strimwidth( $subject, 0, 30, "..." ) ); ?>
    

    上篇:mb_strcut()

    下篇:mb_stripos()