2

通常どおりリダイレクトを実行すると、次のようになります。

$this->redirect('@mypage?apple=1&banana=2&orange=3');

... symfony は正しい URL を生成します:

/something/something?apple=1&banana=2&orange=3

ただし、以下は奇妙な理由でエスケープされます。

$string = 'apple=1&banana=2&orange=3';
$this->redirect('@mypage?'.$string);

...そして、次の URL が生成されます。

/something/something?apple=1&banana=2&orange=3

このエスケープを回避し、アンパサンドを URL に正しく表示する方法はありますか? 考えられることはすべて試しましたが、気が狂いそうです。これは、保存されたクエリをデータベースから文字列として取得し、それを URL にラッチしたい場合に必要です。文字列から配列を生成し、その配列からまったく新しい URL を生成できることは承知していますが、このばかげたエスケープのせいで、多くのオーバーヘッドが発生しているように思えます。

ありがとう。

4

2 に答える 2

1

「正しく表示される」と言うと、URL&の変数セパレータの「正しい」表現であるという事実を見逃している可能性があり&ます-整形式のX(HT)MLの場合、次の&ようにエンコードする必要があります&

とはいえ、スクリプトの動作は、両方の例で同じ動作を期待するという点で異常です。これらはルーティングルールに対するルーティング固有のパラメーターではないと思いますが、デフォルトではsymfonyが次のように変数をスラッシュ化することを期待しています。

/something/something/apple/1/banana/2/orange/3

文字列に干渉しているのは、奇妙なPHP設定ではありませんか?

編集:私はsymfony 1.3.3でそれをテストしました、そしてそれは私が提案したように変数を大幅に削減しています。それを引き起こしているのはPHP/Apacheの設定だと思う傾向があります。php.iniファイルでarg_separator.output設定を確認してください。

于 2010-04-06T20:15:59.883 に答える
1

これがあなたの最善の策だと思います。

$url = $this->getController()->genUrl('search/list');
$this->redirect($url.'?q='.$q.'&g='.$g);

これは私にとっては問題なく機能します(&は&ampにエスケープされません)

于 2010-05-29T11:56:54.917 に答える