我和下面的人有同样的问题,但为他们提供的解决方案对我不起作用。
CodeIgniter - disallowed key characters
CodeIgniter Disallowed Key Characters
Disallowed key characters error message in Codeigniter (v2)
我提交表格时会收到“不允许的关键字符”。
我启用了CSRF保护,并且我在表单字段名称中使用数组(即,搜索[]作为名称,因为有多个选择下拉选项)。我觉得形式名称中的“[]”会影响这种形式。
我已遵循上述帖子中的所有建议。
任何人对表单提交中可能导致此问题的内容有任何其他想法吗?
谢谢!
答案 0 :(得分:1)
与我的回答here一样 - 您只需更新MY_Input-> _clean_input_keys()中的正则表达式以允许更多字符(例如,转义的JSON或转义的HTML / XML)
仅允许英语' !preg_match("/^[a-z0-9\:\;\.\,\?\!\@\#\$%\^\*\"\~\'+=\\\ &_\/\.\[\]-\}\{]+$/iu", $str)
允许使用中文字符: !preg_match("/^[a-z0-9\x{4e00}-\x{9fa5}\:\;\.\,\?\!\@\#\$%\^\*\"\~\'+=\\\ &_\/\.\[\]-\}\{]+$/iu", $str)
我的完整工作功能如下:
public function _clean_input_keys($str) {
// NOTE: \x{4e00}-\x{9fa5} = allow chinese characters
// NOTE: 'i' — case insensitive
// NOTE: 'u' — UTF-8 mode
if (!preg_match("/^[a-z0-9\x{4e00}-\x{9fa5}\:\;\.\,\?\!\@\#\$%\^\*\"\~\'+=\\\ &_\/\.\[\]-\}\{]+$/iu", $str)) {
/**
* Check for Development enviroment - Non-descriptive
* error so show me the string that caused the problem
*/
if (is_env_dev()) {
var_dump($str);
}
exit('Disallowed Key Characters.');
}
// Clean UTF-8 if supported
if (UTF8_ENABLED === TRUE) {
return $this->uni->clean_string($str);
}
return $str;
}
<强> my_helper.php 强>
if (!function_exists('is_env_dev')) {
function is_env_dev() {
return (
defined('ENVIRONMENT') && strtolower(ENVIRONMENT) == 'development' ||
defined('ENVIRONMENT') && strtolower(ENVIRONMENT) == 'testing'
);
}
}
答案 1 :(得分:0)
谢谢,但我在下面的另一篇文章中发现了一条隐藏在下方的评论(位于撰写本文时的底部):CodeIgniter Disallowed Key Characters
评论建议我将$ str添加到exit()注释中进行测试。这表明我的表单字段中缺少双引号。它是一个动态构建的非常复杂的表单,有300行代码,很容易错过。
希望这个答案(以及启发它的评论)能够帮助其他人。
验证输出源可以防止出现这样的问题: - )
此致