2010-03-12 42 views
5

我有一個網站,使用Facebook,Twitter,美味的共享鏈接。它們包含您希望分享的網址的網址編碼網址。問題是我想通過一個php重定向頁面發送facebook/twitter/delicious url。是否有可能urlencode包含url編碼url的url?

它會在編碼的url中編碼一個url嗎?會有副作用嗎?

爲了簡化我的問題:

www.website.com/redirect.php?url=" URLENCODED (http://www.facbook.com/sharer.php?t='URLENCODED(title)'&u='URLENCODED(http://www.hotel.com)') 
+0

要理解遞歸,首先必須瞭解遞歸。 – 2010-03-12 18:02:43

回答

9

您可以多次編碼字符串的百分比編碼和解碼它的時間相同數量得到原來的值:

$str = implode(range("\x00", "\xFF")); 
var_dump($str === urldecode(urldecode(urldecode(urlencode(urlencode(urlencode($str))))))); 

這裏編碼值$str被編碼三次然後解碼三次。重複編碼和解碼的輸出與$str的值相同。

那麼試試這個:

'http://example.com/redirect.php?url='.urlencode('http://www.facbook.com/sharer.php?t='.urlencode('title').'&u='.urlencode('http://www.hotel.com')) 
+0

我明白該怎麼做......我只是擔心urlencoding urlencoded url可能會導致它被解碼的整個網址在重定向頁面...所以我認爲嵌套的url編碼將正常工作? – Mark 2010-03-12 14:09:21

+0

正如@Gumbo所說:「您可以多次編碼一個URL,並在解碼次數相同時獲得原始值。」每次你編碼時,以前的所有編碼部分再次編碼* * – Josh 2010-03-12 14:14:14

+1

@Mark:所以如果你仍然困惑,不,重定向URL不會解碼整個URL,它只會刪除一個「級別」編碼。換句話說,你的計劃是健全的。 – Josh 2010-03-12 14:15:22

1

它添加URL編碼的第二層沒事。 URLEncoding的想法是爲了防止服務器錯誤地解釋可能存在於文本字符串中的任何特殊字符。但是,接收腳本必須指定一個額外的urlencode()層,並採取相應的行動。

或者,如果您知道該字符串已被urlencoded,是否可以簡單地按原樣傳遞它?不需要進一步的urlencoding。

3

您應該可以遞歸編碼URL多次,只要你想。如果你喜歡編碼/字符反覆您將獲得:

0:/
1: %3F 
2: %%3F 
3: %%%%3F 

+0

編碼('?')=%3F。同樣,當遞歸編碼時,唯一被再次編碼的部分是'%',所以它最終更像'%2525253F',其中decode('%25')=% – 2014-02-05 23:18:02

0

或者只是urldecode標題和URL,然後進行urlencode整個字符串。

0

如前所述,您可以儘可能多地對網址進行編碼,但您應該知道對網址數據進行編碼的次數越多,長度增加的次數可能會增加兩次。如果時間太長,這會對用戶造成麻煩。在某些瀏覽器上也可能會限制網址長度。 同樣在服務器端會有一個開銷編碼和解碼數據。 總之,你應該確保你在編碼/解碼多次之前需要它。