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
相关产品推荐
相关产品推荐

