相信不少人遇到 Disallowed Key Characters 這樣的問題,即便是在訪問 CSDN 的時候,由於 CSDN 的那部分網頁是用 CI 寫的,這個問題就出在 CI 的處理提交字符串的類上面。即便只是輸入域名。沒什麼特殊字符,這問題仍是如影隨形,爲何呢?php
這和 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;
} 改成:cookie
function clean_input_keys($str) { /*if ( ! preg_match("/^[a-z0-9:/-]+$/i", $str)) { exit('Disallowed Key Characters.'); }*/ $config = &get_config('config');
if (!emptyempty($config['permitted_uri_chars'])) { if ( ! preg_match("/^[".$config['permitted_uri_chars']."]+$/i", rawurlencode($str)))
{
exit('Disallowed Key Characters.');
}
}session
// Clean UTF-8 if supported if (UTF8_ENABLED === TRUE) { $str = $this->uni->clean_string($str); } return $str;
} 而後把 config/config.php 裏面的:post
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_-'; 改成:this
$config['permitted_uri_chars'] = ''; 便可url
自此問題解決,不懂的朋友能夠理解一下上面這幾段代碼,但願有所幫助。