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... ?>
参见
mb_strwidth()
返回字符串的宽度mb_internal_encoding()
设置/获取内部字符编码
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, "..." ) ); ?>