2012-02-24 76 views
2

我通過一個GET變量傳遞一個URL。當我在下一頁回顯變量時,它會顯示沒有特殊字符的URL。例如,拿網址:PHP - URL GET變量問題

http://example.com/upload?url=http://www.test.com/this%20is%20the%20image.jpg

當這個代碼執行:

echo $_GET['url'];

結果是:

http://www.test.com/this is the image.jpg

如何獲得正是GET變量的值在URL中,而不是在r上轉換etrieval?

回答

3

如果您想要查詢字符串中的原始值,您將需要自己解析$_SERVER['QUERY_STRING']

+0

謝謝,這很好! – Lukas 2012-02-24 06:33:27

1

這樣做:

echo rawurlencode($_GET['url']); 
+1

你的代碼會輸出以下路徑:'http://example.com/upload?url = http://test.com/somepath?somevar = someval&somevar2 = someval2'? – penartur 2012-02-24 06:34:48

+0

對!無法爲此執行「urlencode」。我的解決方法是錯誤的。 – skyronic 2012-02-24 06:48:27

+0

這是錯誤的,以及通過請求字符串傳遞非urlencoded值的整個方法。 – penartur 2012-02-24 06:56:13

0

考慮構建upload?url=...路徑時代替,這將增加更多的靈活性與網址一樣http://www.test.com/this%20is%20the%20image.jpg?with=some&additional=parameters URL編碼的URL。

因此,對於您的示例url,它將是http://example.com/upload?url=http%3A%2F%2Fwww.test.com%2Fthis%2020is%2020the%2020image.jpg

請參閱http://php.net/urlencode瞭解如何對變量進行urlencode編碼。

例子:

頁與鏈接

function showLink($url) { 
    return "/upload?url=".urlencode($url); 
} 

「上傳」 頁面,

echo $_GET['url'] 

這樣,你仍然可以處理環節造成的showLink("http://test.com/somepath?somevar=someval&somevar2=someval2")正確。否則,如果您不會在showLink中轉義它,那麼您將最終得到類似http://example.com/upload?url=http://test.com/somepath?somevar=someval&somevar2=someval2這樣的網址,並且很難判斷somevar2是否是example.comtest.com的請求的一部分(btw,$_GET['url']在這種情況下將包含http://test.com/somepath?somevar=someval)。

+0

這是一個API,所以我希望鏈接只是簡單地粘貼,以保持簡單。 – Lukas 2012-02-24 06:35:13

+0

我的答案正是讓事情更簡單。 $ _GET變量將包含你想要的url,而不需要從請求字符串中解析它。順便說一句,你不應該首先手動創建請求字符串(而不是從數組編譯它),但不幸的是PHP不提供這樣做的內置工具。 – penartur 2012-02-24 06:38:33

+0

順便說一下,我的回答給出了與

'這只是將變量存儲在GET請求中的方式,而不是以其他非標準,不完整和不兼容的方式存儲變量,然後想要獲取原始值在以非標準方式進行解析之後,您不需要使用標準編碼,而是發明了自己的並且克服了其缺點。 – penartur 2012-02-24 06:41:12