javascript - CKeditor:保存时转义 Html(使其在加载时无法运行)
问题描述
ckeditor有点问题。如果我保存
<body onload="alert('test');">
到数据库,重新加载时,代码运行并触发浏览器警报。我希望 CKeditor 在保存之前为文本添加一些格式,这样它就不能在加载时运行。这篇文章是切线相关的,但不是很相关。干杯
解决方案
首先,您需要对数据进行编码(将其视为最佳实践)。从 CKEditor 的角度来看,您只能使用htmlEncodeOutput但是正如@TiiJ7 所解释的那样,您还应该确保您的服务器端代码将编码数据返回给 CKEditor。通过编码,我的意思是特殊的 HTML 字符应更改为如下所示的实体(就像在 中的每个示例中一样ckeditor/samples/old
):
<html>
<head>
<meta charset="utf-8">
</head>
<body onload="alert('test');">
</body>
</html>
撇开最佳实践不谈,让我感到奇怪的一件事是,为什么alert
在您的情况下会执行此操作。我问是因为即使您在源代码模式下粘贴以下未编码的 HTML(甚至加载此类 HTML):
<html>
<head>
<title></title>
<meta charset="utf-8">
</head>
<body onload="alert('test');"> </body>
</html>
然后切换到所见即所得模式,您将不会收到任何alert
消息,因为它会自动放入data-cke-pa-onload
属性中。您可以在夜间样本中验证这一点 - http://nightly.ckeditor.com/18-06-25-06-04/full/samples/old/wysiwygarea/fullpage.html和下面的屏幕截图。
您是否使用了一些导致该问题的第三方插件,或者您已经自定义了 CKEditor 以便现在执行警报?在这种情况下,使用最新和默认版本可能会有所帮助。
推荐阅读
- python - 如何让控制台“记住” Python 中的用户输入?
- java - 用于 postgreSQL 的 jdbc 驱动程序的 Jar 文件未出现在数据库连接的 JAR 列表中(eclipse)
- reactjs - 路由器在使用 WebRTC 的 React 应用程序中无法正常运行
- discord - discord.js 节点通过用户名获取用户
- angular - Angular 12 HttpInterceptor 等到http客户端方法完成
- python - 通过加入 ArcGIS 表更新 SQL 表时出错
- chart.js - chart.js 如何强制最小和最大 y 轴值
- r - 未知或未初始化的列:; 找不到对象
- typescript - 如何在我的 3d raymarched 世界中正确平移/旋转我的相机
- pip - 安装“bincopy”时出错——pip install bincopy