$comments->content();
如果屏论非常长,还带图片的,侧边栏会显示的异常难看。我们一般会改成:
$comments->excerpt(20, '...'); // 假设主题适配最长 20 个字符,然后后边加上 ...
但是看过源码的都知道,excerpt
函数会去除所有的 HTML 标签。
public function excerpt(int $length = 100, string $trim = '...')
{
echo Common::subStr(strip_tags($this->content), 0, $length, $trim);
}
那么有没有保留表情还能截取呢?只能获取评论内容自己截取了,下边是我让 GPT 写的一个函数,放到functions.php
里,然后再需要截取评论内容的地方调用即可。
function truncate_comment(string $text, int $length, string $ellipsis = '...'): string
{
$text = strip_tags($text, '<img>');
// 如果文本长度超过指定长度
if (mb_strlen($text, 'UTF-8') > $length) {
$truncated = '';
$currentLength = 0;
// 使用正则表达式匹配 <img> 标签和其他文本
preg_match_all('/<img[^>]*>|[^<]+/', $text, $matches);
foreach ($matches[0] as $part) {
if (strpos($part, '<img') !== false) {
// 如果是 <img> 标签,直接添加并跳过长度计算
$truncated .= $part;
} else {
// 如果是文本,计算其长度
$partLength = mb_strlen($part, 'UTF-8');
// 检查是否超出指定长度
if ($currentLength + $partLength > $length) {
// 截断文本并添加省略号
$truncated .= mb_substr($part, 0, $length - $currentLength, 'UTF-8') . '...';
break;
} else {
$truncated .= $part;
$currentLength += $partLength;
}
}
}
return $truncated . ' ' . $ellipsis;
}
return $text . ' ' . $ellipsis;
}
调用方式
truncate_comment($comments->content, 20, '。。。')
精选留言