【问题标题】:Codeigniter storing html in database not workingCodeigniter将html存储在数据库中不起作用
【发布时间】:2013-05-06 13:18:49
【问题描述】:

我正在使用 codeigniter 开发 CMS。用户应该了解 HTML 并自己构建页面。现在,我在数据库(mysql 数据库)中存储一些标签时遇到了问题。

用户可以上传图片到服务器,然后在代码中使用图片的路径。 代码在 .当我尝试将某个页面的代码更新为:

<img src="assets/fileserver/versje2.jpg"  alt="" />

一切正常。 但是当我对其应用内联样式时

<img style="width: 200px;" src="assets/fileserver/versje2.jpg"  alt="" />

这行不通。它只是忽略了样式,并将以下内容存储在数据库中:

  <img src="assets/fileserver/versje2.jpg"  alt="" />

它只是删除样式。这怎么可能?

我试过了:
-htmlspecialchars
-htmlentities

$config['global_xss_filtering'] = FALSE;
$config['global_xss_filtering'] = TRUE;

对可能出现的问题有什么建议吗?

【问题讨论】:

    标签: php html mysql codeigniter


    【解决方案1】:

    也许你需要用htmlspecialchars($saveToDB)函数保存它,
    像这样编辑输入:&lt;input name="someHtmlCode" value="&lt;?=$saveToDB;?&gt;" /&gt;
    而不是在现场的 html 文件中使用 htmlspecialchars_decode 函数回显:
    $html = htmlspecialchars_decode($dataFromDB)

    【讨论】:

    • 感谢即使 $config['global_xss_filtering'] 设置为 TRUE 也能正常工作
    【解决方案2】:

    好像我已经找到了! 首先,我有

     $config['global_xss_filtering'] = TRUE;
    

    然后,我将其设置为

    $config['global_xss_filtering'] = FALSE;
    

    但我仍然在表单验证中使用 XSS|clean!

    $this->form_validation->set_rules('inhoud', 'inhoud', 'xss|clean');
    

    这就是为什么它不起作用,现在,样式写入数据库就好了!

    【讨论】:

    • 在我的情况下,我设置了 $config['global_xss_filtering'] = FALSE 并且我不使用表单验证。我使用 ajax 发送 html 标签和 css 内联样式,并使用 $_POST[''] 接收数据,并最终调用该函数插入 MODEL。仍然无法保存内联 css 样式。
    【解决方案3】:

    这对我有用。 (Codeigniter 3)

    保持真实:

    $config['global_xss_filtering'] = TRUE;

    您可以单独设置 FALSE xss 过滤器。

    $this->input->post('input_filed_name', TRUE); // 使用 XSS 过滤器

    $this->input->post('input_filed_name', FALSE); // 没有 XSS 过滤器

    例如:

    $this->input->post('description', FALSE); // without XSS filter
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      相关资源
      最近更新 更多