2012-10-01 74 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的话。