2013-04-09 186 views
0

我有一個非常簡單的路由規則,我用它放在CodeIgniter中的路由配置文件中。處理CodeIgniter路由錯誤?

$route['building/(:num)'] = 'building/$1'; 

路由規則工作得很好,沒有問題,我發現,傳遞變量的參數時,顯示此錯誤消息

An Error Was Encountered 

The URI you submitted has disallowed characters. 

我都知道,我告訴笨只接受唯一的問題數字作爲參數,但我需要做的,以防萬一錯誤的參數,它必須重定向到另一個定義的頁面或網址,而不是顯示此錯誤。
我不知道,如果它能夠做到這一點通過配置文件,或者我應該寫一個控制器來做到這一點
感謝

回答

0

路線從來沒有消毒或錯誤檢查的URI,他們在那裏只是爲了匹配模式。生成錯誤是因爲URI中存在application/config/config.php中的$config['permitted_uri_chars']設置中不存在的字符,然後_filter_uri()方法中的URI類將檢查該字符。

不知道你想要使用的變量是什麼樣子(它顯然具有URI不友好的字符),我會建議在嘗試在URL中使用它們之前對這些變量進行驗證和消毒。 尤其是如果它們是用戶生成的。不要相信別人。永遠。

你的一些選項包括:

  1. 消毒/檢查變量的值,看它是否包含不應該在你的URI字符。默認配置設置幾乎是URI字符的標準(儘管也允許一些其他配置),所以如果可能的話,我會試着堅持下去(特別是如果你不知道你在做什麼)。

  2. 將您的permitted_uri_chars列表更改爲包含其他字符(不是真的推薦,請參閱#1)。

  3. 擴展URI類並替換/修改_filter_uri()方法,用重定向或其他代碼替換show_error()部分以滿足您的需求。也不是真的推薦,因爲圖書館不應該控制你的重定向。