我需要將編碼字符串傳遞給CodeIgniter控制器。CodeIgniter URI中的百分比符號
例:
DOSOMETHING/Coldplay/Fix+You/273/X+%26+Y/
我的問題是百分號是不允許的字符。我試圖更改配置文件,如下:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+\%';
的+
是好的,但%
無效。你能幫我改變這個reg exp,所以它會允許%
這個符號嗎?提前致謝!
我需要將編碼字符串傳遞給CodeIgniter控制器。CodeIgniter URI中的百分比符號
例:
DOSOMETHING/Coldplay/Fix+You/273/X+%26+Y/
我的問題是百分號是不允許的字符。我試圖更改配置文件,如下:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+\%';
的+
是好的,但%
無效。你能幫我改變這個reg exp,所以它會允許%
這個符號嗎?提前致謝!
將「-」放在字符串的末尾,否則將被解釋爲範圍。你可以看到%已經在允許的字符列表中。
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+-';
恩...你的樣本串再次照看。這就是爲什麼你會得到「The URI you submitted has disallowed characters
」。
簡短說明:添加符號&到允許的字符列出
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_+&-';
龍解釋
有兩件事情一起玩。
A) CodeIgniter檢查所有的URI 段爲不允許的字符。這通過將允許的字符列入白名單來實現。可以在$config['permitted_uri_chars']
變量中的/ system/application/config/config.php中檢查哪些被允許。默認值設置爲'a-z 0-9~%.:_-'
。因此,允許從a到z,空格,所有數字和以下字符*〜%。:_-的所有字母。
好吧,讓我們比較,爲您的樣本URI,你說的作品
a-z 0-9~%.:_-
DO_SOMETHING/Coldplay/Fix+You/273/X+26+Y/ //note the missing %
所有的人物都是好的......但等待什麼的加號+?它不在允許的字符列表中!然而這個URI沒有被抱怨?這是你的問題的關鍵。
B)笨之前的白名單字符檢查以防止有人通過簡單URL編碼的URI繞過單向urldecodes的URI段。因此,+被解碼到一個空間。此行爲是由於urlencode(其編碼空間爲+符號,偏離RFC 1738)。這就解釋了爲什麼允許使用+符號。
這兩件事合起來解釋了爲什麼這個特定的URI不起作用。
urldecode(DO_SOMETHING/Coldplay/Fix+You/273/X+%26+Y/) //evaluates to
//DO_SOMETHING/Coldplay/Fix You/273/X & Y/
哎呦...的urldecoding轉換%26到&
這是不是允許的字符。 Mistery ;-)解決
試試這個: $ config ['uri_protocol'] =「PATH_INFO」;
感謝您的輸入,但這並沒有解決我的問題:( 我仍然得到URI您提交已禁用的字符。 我改了行,你sugested和它工作正常,但是當我在輸入% URL它打破 我嘗試相同的例子: DO_SOMETHING /酷玩/修復+你/ 273/X +%26 + Y/ 如果我刪除%完美的作品... – RaduM 2009-06-20 20:11:43
增強的答案被忽視的問題。特定於您的URI第一次 – jitter 2009-06-20 21:14:57
:)上帝該死的URLDECODE,我看過URI.php中的代碼,但是xss clean正在完成這項工作,所以我錯過了它。 謝謝你,現在一切都很完美。 – RaduM 2009-06-21 10:25:25