2010-05-14 62 views
2

我正在通過querystring檢索編碼的URL。我需要再次將它傳遞給下一頁。當我找回它的第一次,使用$_REQUEST['url'],只有斜槓解碼,e.g:

http://example.com/search~S10?/Xllamas&searchscope=10&SORT=D/Xllamas&searchscope=10&SORT=D&SUBKEY=llamas/51%2C64%2C64%2CB/browse

php docs page for urldecode建議不要解碼請求數據,並說會已經被解碼。我需要它完全解碼,所以我可以再編碼一次,而不需要對某些部分進行雙重編碼,或者根本不解碼。

我不確定爲什麼我對這些數據的體驗與php文檔不一致。欣賞任何幫助或指針相同!

編輯:嘗試發佈相關的代碼,這是散落:

的URL進行編碼和(使用Smarty的模板,在HTML文件)添加到查詢字符串:
<a class="button" href="{$baseurl}search_nojs?searcharg={$searcharg|escape:'url'}&url={$next|escape:'url'}"><span>Next&gt;&gt;</span></a>

如果該鏈接其次,我抓住了URL回到了查詢字符串(在php文件):

 if(array_key_exists('url', $_REQUEST)) { 
      $sm->assign("searchurl", $_REQUEST['url']); 
     } 

然後,我想堅持的URL回查詢字符串爲下一個鏈接(在另一個HTML文件):
href="{$baseurl}detail?bibid={$res.bibid}&searcharg={$searcharg}{if $searchurl}&searchurl={$searchurl}{/if}"

我還打印{$searchurl}直接到頁面上,並獲得相同的半逃脫的結果。

這裏是查詢字符串對數據的另一個例子,我從$_REQUEST得到:在查詢字符串

原始編碼的網址:從$_REQUEST檢索
searcharg=mammals&url=http%3A%2F%2Fexample.com%2Fsearch%7ES10%3F%2FXmammals%26searchscope%3D10%26SORT%3DD%2FXmammals%26searchscope%3D10%26SORT%3DD%26SUBKEY%3Dmammals%2F51%252C1114%252C1114%252CB%2Fbrowse

數據:
searcharg=mammals&searchurl=http://example.com/search~S10?/Xmammals&searchscope=10&SORT=D/Xmammals&searchscope=10&SORT=D&SUBKEY=mammals/51%2C1114%2C1114%2CB/browse

我知道這種方法可能看起來好奇 - 我試圖製作一個移動顯示器,圍繞黑盒數據庫工作。再次感謝任何幫助!!

+0

你確定嗎?什麼是例如Firebug說你請求的URL是? – 2010-05-14 18:41:25

+0

你能發表一些代碼嗎? – 2010-05-14 18:42:17

+0

我已經添加了一些信息;希望它會給上下文。謝謝你們! – 2010-05-14 19:13:51

回答

1

這裏是查詢字符串對比數據,我從$ _REQUEST得到的另外一個例子:在查詢字符串

原始編碼的網址: searcharg =哺乳動物& URL = HTTP%3A%2F%2Fexample。 COM%2Fsearch%7ES10%3F%2FXmammals%26searchscope%3D10%26SORT%3DD%2FXmammals%26searchscope%3D10%26SORT%3DD%26SUBKEY%3Dmammals%2F51%252C1114%252C1114%252CB%2Fbrowse

這是雙編碼。例如:%252C -> %2C -> , 所以在你編碼url參數的時候,你引入了雙重編碼。也許你應該確保在編碼參數之前解碼它們,直到它們不再被解碼(又稱規範化)。你可以在這個循環中使用urldecode

您還希望確保將url參數放回到html上下文中(作爲鏈接),以便爲HTML屬性轉義。否則,你有一個XSS漏洞。

+0

這似乎非常有幫助,我會從這個角度來處理它。 – 2010-05-14 21:33:17

+0

我發現了它在第一次檢索時需要解碼的地方。非常感謝,哈!我也會記住你的另一個提示。 – 2010-05-17 14:43:53

0

comma (U+002C) is a reserved character in the query,因此必須與%2C進行編碼:

3.4。查詢組件

查詢組件是一個由 資源解釋的信息字符串。

query   = *uric 

在一個查詢組件,字符 「;」, 「/」, 「?」, 「:」, 「@」, 「&」, 「=」, 「+」, 「,」 ,並且「$」被保留。

+0

我在他的URL中看不到逗號,但他在第一個變量名稱和某些值中有一個正斜槓,這可能會導致問題。 – arnorhs 2010-05-14 18:57:43

+0

Gumbo:這是否意味着我可以使用urldecode? (p.s.附加信息添加到問題) – 2010-05-14 19:13:23