【问题标题】:Codeigniter trying to send HTML content via ajax?Codeigniter 试图通过 ajax 发送 HTML 内容?
【发布时间】:2012-12-18 17:15:59
【问题描述】:

我正在尝试通过 ajax 将 HTML 字符串从客户端发送到服务器。我不断收到“不允许的关键字符”错误。所以我把这个$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'; 设置为空$config['permitted_uri_chars'] = ''; 因为CodeIgniter 说Leave blank to allow all characters -- but only if you are insane. 但我仍然得到Disallowed Key Characters 错误。

这就是我尝试发送的方式:

var content = '<p class="MsoNormal">Hi {$first_name}</p>\n<p class="MsoNormal">My name is Bill, etc etc.</p>';

$.get('/task/preview_template', {content:content}, function(data) {
    console.log(data); //Disallowed Key Characters
});

【问题讨论】:

  • 尝试json_encode($html) 然后发送数据,并在那里解码
  • @w0rldart HTML 不在服务器上。它在客户端,我正在尝试将其发送到服务器。
  • @Shauna 破解 CodeIgniter 的答案(其他答案不适用于我)。我希望我可以在不破解 CodeIgniter 核心的情况下做到这一点......
  • 您提到您正在“尝试将其发送到服务器”。你是怎么做到的?没有更多信息,您将不会获得太多帮助,并且没有更多信息,我发布的链接中的第二个答案很可能是最有可能的,因为您还提到发送时您正在通过 jQuery .修改您的问题以使其更加清晰和彻底可能是个好主意

标签: php codeigniter


【解决方案1】:

_clean_input_keys 可能是引发错误的罪魁祸首,并且您有大量字符超出了"/^[a-z0-9:_\/-]+$/i" 的允许字符范围。

我能想到的几种方法可以解决这个问题:

  1. 修改 _clean_input_keys 使其接受额外的字符。当然,这是一个内部功能,除非您知道自己在做什么,否则不应更改。 (或者,您可以修改它以允许 HTML 编码的特殊字符和 HTML 编码字符串。这有助于减轻将此类字符添加到 _clean_input_keys 时对安全性的危害。)

  2. 在发送之前对字符串进行编码,然后在服务器端对其进行解码。这对你和所涉及的计算机来说都需要做更多的工作,但它可以保持 _clean_input_keys 完整,并且应该允许你发送你的字符串,如果你能找到一个在两个方向上都可靠并且不可靠的编码产生任何不允许的字符。由于您使用的是 GET,因此您可能不仅会在服务器端遇到 GET 输入限制,而且还会在浏览器端遇到 GET 输入限制。

  3. 使用 POST 代替 GET 并将您的内容作为数据对象发送。然后只需在服务器上使用$_POST 变量,而不是$_GET。虽然这可能有效,但它对 REST 动词的使用有点不正统和不标准。

  4. 将您的模板内容存储在服务器上,并按名称引用它,而不是将其存储在 JavaScript 中。当然,这仅在您没有在 JavaScript 中动态生成模板内容时才有效。但是,如果您在所有 JavaScript 调用中都使用相同的模板,那么实际上没有理由从 JavaScript 开始发送该信息。

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多