词条:DisallowedKeyCharacters意思:无效的关键字符;关键字符不匹配相信很多人遇到DisallowedKeyCharacters这样的问题,即使是在访问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错误提示的方法。找到/system/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;
}