mb_strimwidth

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

mb_strimwidth指定した幅で文字列を丸める

説明

mb_strimwidth ( string $string , int $start , int $width , string $trim_marker = "" , string|null $encoding = null ) : string

文字列 string を指定した幅 width で丸めます。

パラメータ

string

丸めたい文字列。

start

開始位置のオフセット。文字列の始めからの文字数 (最初の文字は 0) です。 負のオフセットは、文字列の末尾からのオフセットと解釈されます。

width

丸める幅。負の値は、文字列の末尾からの幅を数えます。

trim_marker

丸めた後にその文字列の最後に追加される文字列。

encoding

encoding パラメータには文字エンコーディングを指定します。省略した場合、もしくは null の場合は、 内部文字エンコーディングを使用します。

返り値

丸められた文字列を返します。 trim_marker が設定された場合、 width にマッチする最後の文字を trim_marker で置き換えます。

変更履歴

バージョン 説明
8.0.0 encoding は、nullable になりました。
7.1.0 負の startwidth をサポートするようになりました。

例1 mb_strimwidth() の例

<?php
echo mb_strimwidth("Hello World"010"...");
// "Hello W..." と出力します
?>

参考

add a note add a note

User Contributed Notes 4 notes

up
1
felixstar4 at gmail dot com
2 years ago
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......................
up
6
josiah dot ritchie at gmail dot com
13 years ago
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))."..."
up
-17
CBieser
12 years ago
<?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;
}
?>
up
-58
Rich Mehta
6 years ago
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, "..." ) ); ?>
To Top