将文本修剪为340个字符

CLi*_*own 13 php ellipsis

我正在从数据库中提取博客文章.我想将文本修剪为最多340个字符.

如果博客文章超过340个字符,我想将文本修剪为最后一个完整单词并在末尾添加"...".

E.g.

NOT: In the begin....

BUT: In the ...
Run Code Online (Sandbox Code Playgroud)

Nic*_*ynt 26

看起来你想要首先将文本精确修剪为340个字符,然后找到字符串中最后一个''的位置并减少到该数量.像这样:

$string = substr($string, 0, 340);
$string = substr($string, 0, strrpos($string, ' ')) . " ...";
Run Code Online (Sandbox Code Playgroud)


ono*_*azu 16

如果启用了mbstring扩展(现在在大多数服务器上),则可以使用mb_strimwidth函数.

echo mb_strimwidth($string, 0, 340, '...');
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 14

其他答案向您展示如何使文本大约 340个字符.如果这对您没问题,那么请使用其他答案之一.

但是如果你想要一个非常严格的最多 340个字符,其他答案将无效.您需要记住,添加'...'可以增加字符串的长度,您需要考虑到这一点.

$max_length = 340;

if (strlen($s) > $max_length)
{
    $offset = ($max_length - 3) - strlen($s);
    $s = substr($s, 0, strrpos($s, ' ', $offset)) . '...';
}
Run Code Online (Sandbox Code Playgroud)

另请注意,这里我使用了一个重载,strrpos它接受一个偏移量直接从字符串中的正确位置开始搜索,而不是先缩短字符串.

看到它在线工作:ideone

  • 应该注意的是,如果文本中没有空格,这只会产生"......" (2认同)

Joh*_*nde 7

尝试:

preg_match('/^.{0,340}(?:.*?)\b/siu', $text, $matches);
echo $matches[0] . '...';
Run Code Online (Sandbox Code Playgroud)

  • 默认情况下,`.`与换行符不匹配.因此,当在第340个字符之前有换行符时,它将无效.最后添加`s`修饰符就可以了. (4认同)