0

我正在尝试通过 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
});
4

1 回答 1

0

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

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

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

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

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

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

于 2012-12-18T18:02:10.160 回答