使用CKEditor时图像标记出现问题

使用CKEditor时图像标记出现问题,ckeditor,uploadcare,Ckeditor,Uploadcare,我正在使用上传和存储图像,这是工作 但是,CKEditor 4.1.1似乎被这些图像阻塞了 通过CKEditor添加图像。 图像的初始位置与预期一致。但是,在保存数据时,CKEditor显然在提交数据之前做了一些奇怪的事情 在一些测试中,在格式化和重新排列HTML的过程中,CKEditor去掉了“style”图像属性和第一个打开的双引号,我可以在数据库本身的文本数据中看到 这种行为完全可以复制 通过CKEditor编辑图像。 最初,图像看起来不错。但是当我查看源代码时,图像的HTML被净化为以文

我正在使用上传和存储图像,这是工作

但是,CKEditor 4.1.1似乎被这些图像阻塞了

通过CKEditor添加图像。

图像的初始位置与预期一致。但是,在保存数据时,CKEditor显然在提交数据之前做了一些奇怪的事情

在一些测试中,在格式化和重新排列HTML的过程中,CKEditor去掉了“style”图像属性和第一个打开的双引号,我可以在数据库本身的文本数据中看到

这种行为完全可以复制

通过CKEditor编辑图像。

最初,图像看起来不错。但是当我查看源代码时,图像的HTML被净化为以文本形式呈现,而不是以图像对象形式呈现

禁用第三方插件。

如前所述,除了字数和字符数之外,我还使用Uploadcare。我禁用了两个插件,但这并没有改变任何事情

想法。

在保存过程中,我只是通过CodeIgniter中的$this->db->escape()函数清理数据,这是无法避免的,否则数据将不会提交,并且我收到一个错误

需要明确的是,在测试过程中,任何类型的图像对象都会出现错误;手动添加或通过Uploadcare添加

在我的查看页面中,我有:

<script type="text/javascript">
    CKEDITOR.replace('note', {
        allowedContent: true
    });
</script>

CKEDITOR.replace('note'{
允许内容:正确
});
其中---“将禁用过滤器(数据将不被过滤,所有功能将被激活)。”

然而,它不起作用,它做的和以前完全一样;按名称剥离样式属性,并将HTML转换为其常规文本等价物

如果我选择定义某个特定的东西,那么几乎所有东西都会关闭,包括插件,奇怪的是,正是我为之编写了一条规则:

<script type="text/javascript">
    CKEDITOR.replace('note', {
        allowedContent: {
            'img': {
                styles: 'height, width'
            }
        }
    });
</script>

CKEDITOR.replace('note'{
允许的内容:{
“img”:{
样式:“高度、宽度”
}
}
});
所以我不知道发生了什么

我也曾在as me中尝试过这个建议,但两种方法都不起作用,这让我相信这是CKEditor本身特有的问题,而不是数据本身的处理

如果有人对我如何说服编辑处理图片有任何建议,我很乐意接受任何建议

  • 设置99.9%的
    allowedContent:true
    ,如果操作正确,将阻止CKEditor剥离图像
  • 您的
    allowedContent
    设置(第二个代码示例)不正确。它不允许
    src
    alt
    属性。没有
    src
    的图像将被CKEditor视为无效。所以你至少应该有:

    allowedContent: {
        img: {
           attributes: '!src, alt', // src is required
           styles: 'height, width'
        }
    }
    
  • 因此,第1点。或2。应该有用-我做过很多次,所以我很确定。因此,我认为您有第二个问题,您的服务器破坏了一些东西
  • 这里的问题(除了需要allowedContent:true或正确设置的规则)是CodeIgniter的XSS过滤。在我们访问$\u POST(或$\u get/$\u REQUEST)之前,CI已经对该数据进行了筛选,在这种情况下,它将其破坏。无法基于每个控制器重写此设置,因为它在加载控制器之前已运行

    因此,您可以在/application/config/config.php中完全禁用它(不推荐)

    或者使用一种不太严厉的方法(但仍然不理想)在某些页面上手动禁用它(例如,我的示例在/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;
    }
    

    我的问题与您的问题完全相同,这为我解决了问题。

    您应该将问题缩短。不要讲完整的故事-只列出事实并问你的问题。似乎只有当我对附加了CKEditor的文档进行编辑时,我所经历的奇怪才会发生。除此之外,图像代码仍然很好。这方面有什么进展吗?我有完全相同的问题,建议的修复方案都不起作用。我已经确认它与CodeIgniter无关(我已经在禁用protect_标识符的情况下进行了测试)。在我有机会处理它之前,CKEditor在post数据中以某种方式破坏了它。更正,这是CodeIgniter。在某些地方,它甚至会弄乱$\u POST变量(我假设只有在使用输入助手时才会这样)。一个独立的HTML页面可以很好地显示这一点。嗨,Reinmar,我已经尝试了很多方法,将服务器和框架从等式中剔除,这没有什么区别。正如我所解释的,样式属性名被选择性地删除,框架和数据库都没有这样做;CKEditor仍在有选择地删除样式属性名称。能否尝试在JSFIDLE上创建一个有限的示例?不,太复杂了。根据另一个测试,CodeIgniter可能是在使用我以前从未见过的常规高度和宽度定义时删除属性“style”和“height”的罪魁祸首。即使我删除了xss_clean规则,这种情况也会发生。但这并不能解释为什么HTML被转换成文本项。因此,至少有两种不同的错误发生。降低复杂性是调试它的最佳方法。正如我在第3点中所写的你很可能要处理不止一个问题。
    $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;
    }