You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Laravel项目中Summernote无法显示数据库HTML内容的图片问题

解决Summernote无法显示数据库加载的图片问题

你遇到的核心问题是从数据库读取的HTML内容里,图片路径的斜杠(/)被转成了实体编码(""),导致Summernote无法正确识别图片地址。这是因为直接将HTML内容写入<textarea>时,浏览器会自动对特殊字符进行实体转义——哪怕你用了Laravel的{!! !!}语法避免后端转义,前端渲染时还是会触发这个问题。

下面是几个经过验证的解决方案,按优先级排序:

方案1:通过Summernote的code方法动态设置内容(推荐)

不要直接把HTML内容写在<textarea>标签内,而是在Summernote初始化完成后,用JS方法注入内容,这样能绕过浏览器的自动转义流程。

修改前端代码:

<form method="post">
    <div>
        <!-- 留空textarea,不要直接填充内容 -->
        <textarea class="summernote" id="summernote" name="editordata"></textarea>
    </div>
</form>
$(document).ready(function() {
    // 先初始化Summernote编辑器
    $('#summernote').summernote({ 
        tabsize: 2, 
        height: 400 
    });

    // 用Laravel的json_encode确保内容在JS中是安全的字符串,避免引号冲突
    var editorContent = {!! json_encode($cms_home->homepage_content) !!};
    
    // 动态设置编辑器内容
    $('#summernote').summernote('code', editorContent);
});

这个方法的优势在于:code方法会直接将原始HTML字符串传递给Summernote的解析器,完全跳过<textarea>的自动转义环节,图片路径的斜杠能保持原样。

方案2:后端先还原实体编码

如果数据库里的内容本身已经被转义(比如存储了&quot;/images/xxx.jpg&quot;而不是"/images/xxx.jpg"),那需要先在后端解码:

// 在控制器中处理内容
$decodedContent = htmlspecialchars_decode($cms_home->homepage_content);
// 把$decodedContent传给视图

处理完成后再用方案1的JS方法设置内容,就能彻底解决转义残留问题。

方案3:检查Summernote的配置

确保你的Summernote没有开启自动转义内容的配置项。默认情况下Summernote不会转义HTML,但如果有自定义配置,可以检查是否设置了escape: true,如果有,改成escape: false

$('#summernote').summernote({ 
    tabsize: 2, 
    height: 400,
    escape: false // 确保这个值是false
});

快速验证步骤

  1. 先在后端输出$cms_home->homepage_content,确认原始内容里的图片路径是正确的(比如src="/images/xxx.jpg")。
  2. 用浏览器的开发者工具查看Summernote编辑器的HTML,检查图片的src属性是否还是被转义的状态。
  3. 如果用了方案1,查看JS控制台是否有报错,确保editorContent变量的值是正确的原始HTML。

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

火山引擎 最新活动