3

への呼び出しのようです

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

引数を適切にエスケープしないので、

$myargs=array(p1=>'string that has + or / within it')

作成されるURLは次のようになります。

 ..../myaction/?p1/string%20that%20has%20+%20or%20/%20within%20it

アクションのgetParamsコレクションに値'文字列が含まれるp1が含まれるようにします。

引数を_redirectに渡す前に引数を処理する標準的な方法はありますか?

Eyal

4

2 に答える 2

9

はい、2 つの標準的な方法があります。

  1. すべてのパラメーターをルート パラメーターとして渡しますが、それらを php urlencode() 関数でエンコードします。

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

  2. パラメータをクエリ パラメータとして渡す

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

パラメータは論理的にルートではなくクエリパラメータであるため、2番目のアプローチを採用することをお勧めします。Magento は多くのアーキテクチャの考え方で作られているため、通常は物事を行うためのより良い方法を示しています。そのため、あなたの場合、2 番目の方法を使用してパラメーターを送信する方が簡単です。

注意: _redirect() は内部で Mage_Core_Model_Url を使用するため、この回答で述べられていることはすべて、他のすべての URL 形成ルーチンと Url モデルのすべての使用法に当てはまります。

于 2010-12-27T16:54:31.887 に答える
1

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm#whatwhyを参照し、「予約文字」セクションを読んでください。

于 2010-12-27T11:51:47.010 に答える