mb_strimwidth

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

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

说明

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 支持负数的 startwidth

范例

Example #1 mb_strimwidth() 例子

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

参见

User Contributed Notes

felixstar4 at gmail dot com 11-Apr-2018 05:53
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......................
Rich Mehta 22-May-2014 02:58
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, "..." ) ); ?>
CBieser 26-Aug-2008 12:50
<?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;
}
?>
josiah dot ritchie at gmail dot com 13-Sep-2007 11:48
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))."..."