You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Summernote保存新闻摘要时去除img标签的实现方案咨询

Laravel Summernote 无图片摘要生成方案

实现逻辑如下:

  • 基于你已有的DOMDocument解析逻辑,直接克隆已处理完图片路径的DOM对象,避免修改用于存储完整内容的原始DOM数据
  • 移除克隆DOM中所有img节点
  • 根据需求选择提取纯文本或保留安全排版标签,再截取适配长度作为摘要

你可以直接替换原有代码中summary赋值部分的逻辑,完整修改后的代码示例如下:

$content = $request->content;
$dom = new \DomDocument();
// 若存在中文乱码问题,可在content前加UTF8声明,替换为下行代码
// $dom->loadHtml('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . $content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$dom->loadHtml($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);    
$images = $dom->getElementsByTagName('img');
foreach($images as $k => $img){
    $data = $img->getAttribute('src');
    list($type, $data) = explode(';', $data);
    list($type, $data) = explode(',', $data);
    $data = base64_decode($data);
    $image_name= '/upload/'.time().$k.'.png';
    $path = public_path() . $image_name;
    file_put_contents($path, $data);
    $img->removeAttribute('src');
    $img->setAttribute('src', $image_name);
}
$description = $dom->saveHTML();
$summernote = new News();
$summernote->title = $request->title;
$summernote->content = $description;

// 新增摘要生成逻辑
$summaryDom = clone $dom;
// 倒序遍历删除img节点,避免节点索引变动导致遗漏
$summaryImages = $summaryDom->getElementsByTagName('img');
for ($i = $summaryImages->length - 1; $i >= 0; $i--) {
    $img = $summaryImages->item($i);
    $img->parentNode->removeChild($img);
}
// 方案1:提取纯文本摘要,截取200字加省略号,可自行调整长度
$summaryText = strip_tags($summaryDom->saveHTML());
$summary = mb_strlen($summaryText) > 200 ? mb_substr($summaryText, 0, 200) . '...' : $summaryText;

// 方案2:保留p/br/strong等安全排版标签,仅移除img,适合需要保留简单格式的场景
// $summary = strip_tags($summaryDom->saveHTML(), '<p><br><span><strong><em>');

$summernote->summary = $summary;
$summernote->save();

内容的提问来源于stack exchange,提问作者misry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 04:27:01