如果HTML不正确,Ckeditor 4将删除<img/>标记。如何阻止这种行为

时间:2016-09-30 07:58:29

标签: html ckeditor

我们在项目中使用CKEditor。我们最近将版本从3.X升级到4.x.更新后,我们无法在旧保存的文档中看到<img>标记。当我们点击来源时,我们会看到

<p>&nbsp;<p>代替<p><img ......><p>

在进一步调试时,我们发现许多具有<img>标记的文档在<img>标记中也有<img /="/" src="/folder/11801321/112267100.neck.png" height="308" width="467">的垃圾属性。

垃圾,我指的是标记/="/"的这一部分。这是我们处理用户输入时引入的错误。我们将旧的CKEditor版本恢复为3.X,编辑器在内部处理垃圾值。它正在削减它。所以用户从不抱怨。

但是现在CKEditor 4没有以相同的方式处理HTML。它实际上剥离了整个<img>标记。

我们有两种方法可以解决此问题。 1.删​​除所有文档中的垃圾字符。这是巨大的数据。需要用户批准才能执行此操作。 2.更改CKEditor 4配置设置以获得与CKEditor 3.X相同的行为。

我们赞成第2点。我一直在搜索和尝试几个配置设置但是无法确定它。

如果有人遇到同样的问题并且已经解决了,请告诉我。

1 个答案:

答案 0 :(得分:1)

如果您真的想要,可以将img标记内的所有代码设置为&#34; protected&#34;这样编辑器就不会删除这段代码:

CKEDITOR.config.protectedSource.push(/<img \/="\/" .*?>/g)
  1. 请记住,您的最终HTML无效。
  2. 由于该部分代码是&#34;受保护&#34;你不会在编辑器中看到这些图像。
  3. 这是一个有效的例子:
    https://jsfiddle.net/oLb4Lmdb/

    然而 - 我真的认为一旦ckeditor实例准备就绪,最好在源代码中用<img \/="\/"替换字符串<img

    CKEDITOR.instances.editor1.on('instanceReady', function() {
        this.setData(this.getData().replace("<img /=\"/\"", "<img"))
    })
    

    通过这种方式,您无需查看&#34; backround&#34;中的所有数据,并且即时更换&#34;即时#34;对于您需要编辑的每个文档。

    你可以查看这个jsfiddle:
    https://jsfiddle.net/k1ewc29p/