CKeditor:保存时转义Html(使其在加载时无法运行)

时间:2018-06-21 08:23:08

标签: javascript html ckeditor ckeditor4.x

ckeditor的问题的

位。 如果我保存

<body onload="alert('test');">

重新加载到数据库时,代码将运行并触发浏览器警报。我希望CKeditor在保存之前向文本添加一些格式,以便它不能在加载时运行。 This个帖子与切向相关,但不完全相关。 干杯

1 个答案:

答案 0 :(得分:0)

首先,您需要对数据进行编码(将其作为最佳实践进行处理)。从CKEditor的角度来看,您只能使用htmlEncodeOutput,但是正如@ TiiJ7解释的那样,您还应确保服务器端代码将编码后的数据返回给CKEditor。编码是指将特殊的HTML字符更改为如下所示的实体(就像ckeditor/samples/old中的每个示例一样):

    &lt;html&gt;
        &lt;head&gt;
            &lt;meta charset=&quot;utf-8&quot;&gt;
        &lt;/head&gt;
        &lt;body onload=&quot;alert('test');&quot;&gt;
        &lt;/body&gt;
    &lt;/html&gt;

除了最佳实践之外,令我惊讶的一件事是,为什么在您的情况下执行此alert。我问是因为即使您在源代码模式下粘贴了未编码的HTML(甚至加载了这样的HTML),也是如此:

<html>
<head>
    <title></title>
    <meta charset="utf-8">
</head>
<body onload="alert('test');">&nbsp;</body>
</html>

,然后切换到所见即所得模式,您将不会收到任何alert消息,因为它将自动放入data-cke-pa-onload属性中。您可以在每晚样本http://nightly.ckeditor.com/18-06-25-06-04/full/samples/old/wysiwygarea/fullpage.html中和以下屏幕截图中进行验证。

enter image description here

您是否正在使用导致该问题的第三方插件,或者您已经自定义了CKEditor,以便可以立即执行警报?在这种情况下,使用最新版本和默认版本可能会有所帮助。