Summernote 执行转义的 html

问题描述

我从一个 MysqL 数据库获取数据,存储的数据是这样的:

<p>&lt;script&gt;alert('123');&lt;/script&gt;<br /></p>

当我正常获取数据时,结果如下:

<script>alert('123');</script>

这很好并且按预期工作,但是当我将数据提取到用 Summernote 初始化的 textarea 时,我收到这样的警报:

enter image description here

Summernote 以某种方式将转义的 html 标签转换为正常运行的 HTML。

我该如何解决这个问题?

这个问题的答案我已经试过了:

Escaped HTML in summernote

它没有用。

解决方法

为什么您不在存储时、在编辑器中或编辑器外显示时清理数据?通常,在我的 CMS 中,我不允许使用 <script/> 标记来帮助减轻用户添加潜在危险脚本的风险。

也就是说,有一个 PR 正在讨论我们如何最好地解决这个问题。 https://github.com/summernote/summernote/pull/3782 信息或帮助将不胜感激,以推动它,甚至是另一个解决问题的 PR。

,

我设法修复了它,而不是像这样通过 jQuery 获取 textarea 中的数据:

<textarea name="description" id="description"></textarea>
<script>
    $('#description').summernote({
        height: 250,codeviewFilter: false,codeviewIframeFilter: true,// toolbar
        toolbar: [
            ['font',['bold','italic','underline','clear']],['color',['color']],['para',['ul','ol','paragraph']],['view',['fullscreen','codeview','help']]
        ],}).on("summernote.enter",function(we,e) {
        $(this).summernote('pasteHTML','<br />&VeryThinSpace;');
        e.preventDefault();
    });
    $("#description").summernote("code","<?php echo $video->getDetails('',$fileName,'desc'); ?>");
</script>

现在它不转换 > 和 $lt; 如果是 script 标签。

在此处查看更多信息:

https://github.com/summernote/summernote/pull/3782#issuecomment-774432392

,

使用 javascript 您可以轻松解决此问题。它在阵营+ Django的的项目为我工作。我还使用了 django_summer_note,它也显示了与您类似的数据。然后我得到了解决方案:

//只是简单地创建这样一个函数将返回您的数据(您django_summernote使用的是哪一个)。

const createBlog = () => {
    return { __html: blog.description };
  };

// 现在在你的 HTML(JSX) 中像这样显示你的数据。

<div className='' dangerouslySetInnerHTML={createBlog()} />