首页 > 解决方案 > CKeditor:保存时转义 Html(使其在加载时无法运行)

问题描述

ckeditor有点问题。如果我保存

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

到数据库,重新加载时,代码运行并触发浏览器警报。我希望 CKeditor 在保存之前为文本添加一些格式,这样它就不能在加载时运行。这篇文章是切线相关的,但不是很相关。干杯

标签: javascripthtmlckeditorckeditor4.x

解决方案


首先,您需要对数据进行编码(将其视为最佳实践)。从 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和下面的屏幕截图。

在此处输入图像描述

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


推荐阅读