相信很多人遇到 Disallowed Key Characters 这样的问题,即使是在访问 CSDN 的时候,因为 CSDN 的那部分网页是用 CI 写的,这个问题就出在 CI 的处理提交字符串的类上面。即使只是输入域名。没什么特殊字符,这问题还是如影随形,为什么呢? 这和CI 的字符串处理类设计有关,是这样的,通过get、post方法提交的字符串,CI 都交给 system/core/Input.php 这个类去处理,那很多人就问了,看url并没有特殊符号,为什么也报这样的错误,因为你忽略了一点,cookie 和 session 传输的字符串,也是由这个类统一处理的,也就是说,get、post、cookie、session 的数据都是由这个类处理的,问题往往也出现在 cookie 和 session 上面,所以网上有很多人提供方法就是,清除一下缓存和 cookie ,确实就没问题了,但是隔一段时间就又有问题了,因为新生成的 cookie 里面含有不被匹配通过的字符串,该怎么解决呢? 解铃还需系铃人,既然问题出现在 Input.php 这个类上面,就修改他好了。 解决 CodeIgniter 框架应用中,出现Disallowed Key Characters错误提示的方法。找到core文件夹下的Input文件,将下面的代码:
function _clean_input_keys($str)
{
if ( ! preg_match(\"/^[a-z0-9:_\\/-]+$/i\", $str))
{
exit(\'Disallowed Key Characters.\');
}
// Clean UTF-8 if supported
if (UTF8_ENABLED === TRUE)
{
$str = $this->uni->clean_string($str);
}
return $str;
}
改成这样:
function _clean_input_keys($str)
{
$config = &get_config(\'config\');
if ( ! preg_match(\"/^[\".$config[\'permitted_uri_chars\'].\"]+$/i\", rawurlencode($str)))
{
exit(\'Disallowed Key Characters.\');
}
// Clean UTF-8 if supported
if (UTF8_ENABLED === TRUE)
{
$str = $this->uni->clean_string($str);
}
return $str;
}
或者改成:
function _clean_input_keys($str)
{
if(preg_match(\"/^,_[a-z0-9:_\\/-]+$/\",$str)){
$str = preg_replace(\"/,_/\",\"\",$str);
}
if ( ! preg_match(\"/^[a-z0-9:_\\/-]+$/i\", $str))
{
exit(\'Disallowed Key Characters.\'.$str);
}
return $str;
}
大概就这样~留个记录。
继续阅读与本文标签相同的文章
下一篇 :
操作系统们正在一起步入未来
-
未来几年,这4个大学专业最吃香,前景广阔堪称铁饭碗!
2026-05-14栏目: 教程
-
这间屋子没有电话
2026-05-14栏目: 教程
-
曾经扬言“我要摧毁人类”的机器人,在拥有公民身份后,近况如何?
2026-05-14栏目: 教程
-
中国客车“抢眼”世界客车博览会
2026-05-14栏目: 教程
-
充分利用系统磁盘空间,Windows 7操作系统如何创建压缩文件夹
2026-05-14栏目: 教程
