问题描述
我从一个 MysqL 数据库中获取数据,存储的数据是这样的:
<p><script>alert('123');</script><br /></p>
当我正常获取数据时,结果如下:
<script>alert('123');</script>
这很好并且按预期工作,但是当我将数据提取到用 Summernote 初始化的 textarea 时,我收到这样的警报:
Summernote 以某种方式将转义的 html 标签转换为正常运行的 HTML。
我该如何解决这个问题?
这个问题的答案我已经试过了:
它没有用。
解决方法
为什么您不在存储时、在编辑器中或编辑器外显示时清理数据?通常,在我的 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 /> ');
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()} />