2012-10-01 101 views
0

我嘗試將搜索重定向到正確的控制器。如果我在searchkey中沒有特殊字符,這工作正常。如果我有特殊的鑰匙,它,我得到一個錯誤的笨:您所提交代碼重定向問題

的URI已經不允許的字符。

這裏是我的代碼:

public function search() 
{ 
    $searchkey = urlencode($this->input->post('searchkey')); 
    switch ($this->input->post('searchtype')) { 
     case 'request':  redirect('portal/requests/search/'.$searchkey, 'refresh'); 
          break; 
     case 'offers':  redirect('portal/offers/search/'.$searchkey, 'refresh'); 
          break; 
     case 'projects': redirect('portal/projects/search/'.$searchkey, 'refresh'); 
          break; 
     default:   redirect('portal/requests/search/'.$searchkey, 'refresh'); 
          break; 
    } 
} 
+0

我相信input-> post()將它們全部編碼爲你,因此它們已經安全 – AbstractChaos

+0

爲什麼你需要發送搜索以及url。我相信這是在搜索字段中顯示搜索關鍵字。是嗎? 。如果是這樣你可以使用會話來設置和檢索參數 – Shaolin

回答

0

那是因爲你不能把「特殊」字符的URL

也就是說,如果我搜索「測試」我被帶到門戶/項目/搜索/測試

,但如果我搜索test @#$)* & &的F - 你不能用那些字符的URL

解決這個無論是在後進行驗證,並進行搜索詞只有numbers and letters

$this->form_validation->set_rules('searchtype', 'Search Type', 'required|alpha_numeric'); 

,或者您有「通行證」的搜索項以另一種方式來運作 - 也許使用flash data,因此,該搜索詞不是由URL傳遞

編輯:默認網址字符爲你(的config.php從線129(大約))參考

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

但爲什麼codeigniter有一個urlencoded字符串的問題?如果我直接將「/ portal/requests/search /%C3%84nderung + am」手動粘貼到瀏覽器,那麼有相同的probs?! – fillibuster

+0

它的一個安全特性 - 在config.php的第129行定義它。請不要改變它 - 它有一個原因... – Laurence

+0

「+」是不允許的 – Laurence

0

或者你可以使用jQuery的d將searchkey發送給控制器,如果它是necceseary的話。