关闭

解决 CodeIgniter 框架应用中,出现Disallowed Key Characters错误提示的方法

标签: 框架
145人阅读 评论(0) 收藏 举报
分类:
相信很多人遇到 Disallowed Key Characters 这样的问题,这个问题就出在 CI 的处理提交字符串的类上面。即使只是输入域名。没什么特殊字符,这问题还是如影随形,为什么呢?

这和 CI 的字符串处理类设计有关,是这样的,通过get、post方法提交的字符串,CI 都交给 system/core/Input.php 这个类去处理,那很多人就问了,看url并没有特殊符号,为什么也报这样的错误,因为你忽略了一点,cookie 和 session 传输的字符串,也是由这个类统一处理的,也就是说,get、post、cookie、session 的数据都是由这个类处理的,问题往往也出现在 cookie 和 session 上面,所以网上有很多人提供方法就是,清除一下缓存和 cookie ,确实就没问题了,但是隔一段时间就又有问题了,因为新生成的 cookie 里面含有不被匹配通过的字符串,该怎么解决呢?

解铃还需系铃人,既然问题出现在 Input.php 这个类上面,就修改他就好,把 _clean_input_keys 方法:

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;   
}  



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:63797次
    • 积分:1010
    • 等级:
    • 排名:千里之外
    • 原创:33篇
    • 转载:30篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论