2010-03-12 87 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

如前所述,您可以尽可能多地对网址进行编码,但您应该知道对网址数据进行编码的次数越多,长度增加的次数可能会增加两次。如果时间太长,这会对用户造成麻烦。在某些浏览器上也可能会限制网址长度。 同样在服务器端会有一个开销编码和解码数据。 总之,你应该确保你在编码/解码多次之前需要它。