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
是的,有两种标准方式.
将所有参数传递为路径参数,但使用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模型的所有用法.
归档时间: |
|
查看次数: |
15144 次 |
最近记录: |