2012-02-17 97 views
1

我試圖讓Codeigniter接受URL中的「@」符號。我已經包括它低於允許的人物之一:不允許Codeigniter URL中的「@」符號

$config['permitted_uri_chars'] = 'a-z 0-9~%.:[email protected]'; 

但是我繼續得到他的錯誤消息:

Disallowed Key Characters. 

每隔性格似乎工作除了「@」精符號。有任何想法嗎?

謝謝!

+2

'@'不是URL的有效字符。它是通用的,而不是CI特定的。你必須百分比編碼它 – 2012-02-17 20:09:18

+0

即使「%40」正在返回錯誤。 – Nick 2012-02-17 20:14:56

+0

您需要允許%作爲允許的字符傳遞%40我相信 – 2012-02-17 22:07:56

回答

2

CodeIgniter路由系統將轉換您的url以將控制器,操作和參數定義爲鍵/值。它檢查密鑰的值是否允許使用字符,並且您可以使用$config['permitted_uri_chars']進行配置,但是您收到的錯誤消息是關於密鑰本身而不是其值。在這種情況下,$config['permitted_uri_chars']不會幫助您允許@符號。你會發現檢查system/core/input.php中的鍵的功能function _clean_input_keys($str)。 %字符是不允許如此「%40」不會通過:在你的情況下解決此

if (! preg_match("/^[a-z0-9:_\/-]+$/i", $str)) 

唯一的辦法就是避免這個人物在關鍵參數(也許它翻譯)。

+0

感謝您的解釋。這在Codeigniter 2.1.0中似乎是新的。我能夠在舊版本中使用「@」符號。 – Nick 2012-02-20 17:30:54

0

您是否已將適當的轉義添加到允許的uri字符串中?

$config['permitted_uri_chars'] = 'a-z 0-9~%\.\:_\-'; 

我從我的一個CI站點複製了此權限,並允許%40。

請參考pekka上面有關實際@符號的評論。

+0

它仍然無法正常工作。這太奇怪了。它適用於我的舊項目,但不是這個。我從字面上開始了這個,所以我想不出任何可能導致它的東西。 – Nick 2012-02-17 20:38:31