带有+或/的参数的magento _redirect

epe*_*leg 3 magento url-encoding

似乎是一个电话

$this->_redirect('*/*/myaction',$myargs);
Run Code Online (Sandbox Code Playgroud)

没有正确地逃避参数,所以如果

$myargs=array(p1=>'string that has + or / within it')
Run Code Online (Sandbox Code Playgroud)

创建的URL将类似于:

 ..../myaction/?p1/string%20that%20has%20+%20or%20/%20within%20it
Run Code Online (Sandbox Code Playgroud)

导致该操作上的getParams集合使p1具有值'或'< - 加号缺失且值已损坏且其内部'没有值或类似的字符串.

是否有任何标准的方法我应该在将它们传递给_redirect之前处理它们?

的Eyal

And*_*kus 9

是的,有两种标准方式.

  1. 将所有参数传递为路径参数,但使用php urlencode()函数对其进行编码:

    foreach ($myargs as $key => $val) {
        $myargs[$key] = urlencode($val);
    }
    $this->_redirect('*/*/myaction', $myargs);
    

    $this->_redirect('*/*/myaction', array('_query', $myargs));
    

你最好采用第二种方法,因为你的params在逻辑上不是路由而是查询参数.Magento具有很多架构思维,所以它通常指出更好的方法来做事 - 这就是为什么在你的情况下使用第二种方式发送params更容易.

注意:_redirect()在内部使用Mage_Core_Model_Url,所以在这个答案中所说的一切都适用于所有其他url形成例程和Url模型的所有用法.