2010-04-06 54 views
2

如果我做一個重定向的動作正常:Symfony 1.4:是否有可能防止轉義URL的轉義?

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

... Symfony的產生正確的網址:

/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,但由於這種愚蠢的轉義,它似乎有很多開銷。

謝謝。

回答

1

當你說「正確顯示」,你可能會丟失的事實,&是變量分離&的URL中的「正確」的表示 - 合式X(HT)ML,&必須被編碼爲&

也就是說,腳本中的行爲是不尋常的,因爲在這兩個示例中您都會期待相同的行爲。我想這些特定的路由不參數傳送到您的路由規則,但我希望的symfony作爲默認slashify你的變量是這樣的:

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

這不是與你的字符串干擾一些奇怪的PHP環境,是它?

編輯:我已經用symfony 1.3.3測試過了,它按照我的建議去掉了變量。我傾向於認爲這是導致它的PHP/Apache設置。檢查你的php.ini文件中的arg_separator.output設置。

+0

@Raise:沒有不尋常的PHP設置或類似的東西。通過「正確顯示」我只是表示分開請求參數的適當的&符號。現在這個「&{banana} = {2}」會被symfony理解爲「&{amp; banana} = {2}」,這是完全錯誤的。 – Tom 2010-04-06 21:41:19

+0

Slashifying ...是的,這將通過routing.yml關聯。但是,我有25個變量串在一起,我不想在路由中聲明,但只想保留爲GET查詢字符串以供進一步操作。 – Tom 2010-04-06 23:51:58

+0

沒有真正解決,但關閉這個問題/標記上述爲接受。 – Tom 2010-04-12 18:23:05

1

我相信這是你最好的選擇。

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

這工作得很好,我(的&的不逃到& AMP)