用CI框架時,有時候會遇到這麼一個問題,打開網頁,只顯示 Disallowed Key Characters 錯誤提示。有人說 url 裏有非法字符。可是肯定 url 是純英文的,問題仍是出來了。但清空瀏覽器歷史記錄和cookies後。 刷新就沒問題了。有時候。打開不一樣的瀏覽器。有的瀏覽器會有問題。有的就不會。瀏覽器
解決 CodeIgniter 框架應用中,出現Disallowed Key Characters錯誤提示的方法。找到core文件夾下的Input文件,將下面的代碼:cookie
01 |
function _clean_input_keys( $str ) |
02 |
{ |
03 |
if ( ! preg_match( "/^[a-z0-9:_\/-]+$/i" , $str )) |
04 |
{ |
05 |
exit ( 'Disallowed Key Characters.' ); |
06 |
} |
07 |
// Clean UTF-8 if supported |
08 |
if (UTF8_ENABLED === TRUE) |
09 |
{ |
10 |
$str = $this ->uni->clean_string( $str ); |
11 |
} |
12 |
return $str ; |
13 |
} |
改爲這樣:app
01 |
function _clean_input_keys( $str ) |
02 |
{ |
03 |
$config = &get_config( 'config' ); |
04 |
if ( ! preg_match( "/^[" . $config [ 'permitted_uri_chars' ]. "]+$/i" , rawurlencode( $str ))) |
05 |
{ |
06 |
exit ( 'Disallowed Key Characters.' ); |
07 |
} |
08 |
|
09 |
// Clean UTF-8 if supported |
10 |
if (UTF8_ENABLED === TRUE) |
11 |
{ |
12 |
$str = $this ->uni->clean_string( $str ); |
13 |
} |
14 |
return $str ; |
15 |
} |
或者改爲:框架
01 |
function _clean_input_keys( $str ) |
02 |
{ |
03 |
if (preg_match( "/^,_[a-z0-9:_\/-]+$/" , $str )){ |
04 |
$str = preg_replace( "/,_/" , "" , $str ); |
05 |
} |
06 |
|
07 |
if ( ! preg_match( "/^[a-z0-9:_\/-]+$/i" , $str )) |
08 |
{ |
09 |
exit ( 'Disallowed Key Characters.' . $str ); |
10 |
} |
11 |
return $str ; |
12 |
} |