用CI框架时,有时候会遇到这么一个问题,打开网页,只显示 Disallowed Key Characters 错误提示。有人说 url 里有非法字符。但是确定 url 是纯英文的,问题还是出来了。但清空浏览器历史记录和cookies后。 刷新就没问题了。有时候。打开不同的浏览器。有的浏览器会有问题。有的就不会。

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

大概就这样~留个记录。

今天遇到这个错误提示,查了一下解决方案:网上有人说是扩展Input类,我觉得问题根源不在这里,后面查到一个国外解决方案:

<!-- 这样将会引起报错 -->
<input type="text" name="fieldname['foo']" value="">

<!-- 这样是正常的. -->
<input type="text" name="fieldname[foo]" value="">

多了一对双引号

source:http://tiffanybbrown.com/2010/07/21/codeigniters-disallowed-key-characters-error-revisited/