我正在从数据库中提取博客文章.我想将文本修剪为最多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
尝试:
preg_match('/^.{0,340}(?:.*?)\b/siu', $text, $matches);
echo $matches[0] . '...';
Run Code Online (Sandbox Code Playgroud)