我正在使用Uploadcare上传和存储图片,这是有效的。
然而,看来CKEditor 4.1.1对这些图像感到窒息。
通过CKEditor添加图片。
图像的初始放置符合预期。但是,在保存数据时,CKEditor在提交数据之前显然做了一些奇怪的事情。
在几个测试中,在格式化和重新排列HTML期间,CKEditor正在剥离“样式”图像属性和第一个打开双引号,我可以在数据库本身的文本数据中看到。
此行为完全可以重现。
通过CKEditor编辑图像。
最初,图像看起来很好。但是当我查看源代码时,图像的HTML将被清理为呈现为文本,而不是呈现为图像对象。
禁用第三方插件。
如前所述,我使用的是Uploadcare,除了Word Count& Char Count。我禁用了两个插件,但这并没有改变任何东西。
思考。
在保存过程中,我只是通过CodeIgniter中的$ this-&gt; db-&gt; escape()函数清理数据,这些函数无法绕过,或者数据不会提交,我收到错误。< / p>
为了清楚起见,在测试过程中,任何类型的图像对象都会出现错误;手动添加,或通过Uploadcare添加。
在我的视图页面中,我有:
<script type="text/javascript">
CKEDITOR.replace('note', {
allowedContent: true
});
</script>
其中 - according to the documentation - “将禁用过滤器(数据不会被过滤,所有功能都会被激活)。”
然而,它不起作用,它与以前完全一样;按名称剥离样式属性并将HTML转换为常规文本等效项。
如果我选择专门定义一些内容,几乎可以解决所有问题,包括插件,以及 - 奇怪的是 - 我为此编写了一条规则:
<script type="text/javascript">
CKEDITOR.replace('note', {
allowedContent: {
'img': {
styles: 'height, width'
}
}
});
</script>
所以我不知道发生了什么。
我也尝试过a thread on their forums where someone is experiencing exactly the same problem中的建议,但两种方法都不起作用,这让我相信这是CKEditor本身特有的问题,而不是数据本身的处理。
如果有人对我如何哄骗CKEditor处理图片有任何建议,我会很乐意接受任何建议。
答案 0 :(得分:2)
allowedContent: true
设置为99.9%会阻止CKEditor剥离图像如果您正确执行。您的allowedContent
设置(第二个代码示例)不正确。它不允许src
和alt
属性。没有src
的图像将被CKEditor剥离为无效。所以你应该至少拥有:
allowedContent: {
img: {
attributes: '!src, alt', // src is required
styles: 'height, width'
}
}
答案 1 :(得分:0)
这里的问题(在需要allowedContent:true或正确设置规则之上)是CodeIgniter的XSS过滤。在我们访问$ _POST(或$ _GET / $ _ REQUEST)之前,CI已经对此数据进行了过滤,在这种情况下会破坏它。此设置无法在每个控制器的基础上覆盖,因为它已在加载控制器之前运行。
所以你可以在 /application/config/config.php 中完全禁用它(不推荐)
$config['global_xss_filtering'] = FALSE;
或者在某些页面上手动禁用它(但是仍然不理想)(即我的示例在/ admin / help下的所有页面上将其关闭)。也在 /application/config/config.php 。
中$config['global_xss_filtering'] = TRUE;
# Override the XSS filtering on /admin/help
if (preg_match("/^\/admin\/help/", $_SERVER["QUERY_STRING"])) {
$config['global_xss_filtering'] = FALSE;
}
我遇到了你遇到的确切问题,这解决了我的问题。