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, "..." ) ); ?>
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
mb_strimwidth — 获取按指定宽度截断的字符串
$str
, int $start
, int $width
[, string $trimmarker
= ""
[, string $encoding
= mb_internal_encoding()
]] )
按 width
将字符串 str
截短。
str
要截短的 string。
start
开始位置的偏移。从这些字符数开始的截取字符串。(默认是 0 个字符) 如果 start 是负数,就是字符串结尾处的字符数。
width
所需修剪的宽度。负数的宽度是从字符串结尾处统计的。
trimmarker
当字符串被截短的时候,将此字符串添加到截短后的末尾。
encoding
encoding
参数为字符编码。如果省略,则使用内部字符编码。
截短后的 string。
如果设置了 trimmarker
,还将结尾处的字符替换为 trimmarker
,并符合 width
的宽度。
版本 | 说明 |
---|---|
7.1.0 |
支持负数的 start 和 width 。
|
Example #1 mb_strimwidth() 例子
<?php
echo mb_strimwidth("Hello World", 0, 10, "...");
// 输出 Hello W...
?>
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, "..." ) ); ?>
<?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;
}
?>
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))."..."