5

我有一个使用 facebook、twitter 和美味分享链接的网站。它们包含您希望共享的网站的 url 编码 url。问题是我想通过 php 重定向页面发送 facebook/twitter/delicious 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)')
4

5 回答 5

9

您可以使用百分比编码对字符串进行多次编码,并通过对其进行相同次数的解码来获取原始值:

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

这里的值$str被编码了 3 次,然后被解码了 3 次。重复编码和解码的输出与 的值相同$str

所以试试这个:

'http://example.com/redirect.php?url='.urlencode('http://www.facbook.com/sharer.php?t='.urlencode('title').'&u='.urlencode('http://www.hotel.com'))
于 2010-03-12T14:06:31.120 回答
3

您应该能够根据需要对 URL 进行多次递归编码。如果你对像 / 这样的字符进行重复编码,你会得到:

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

等等

于 2010-03-12T14:07:57.230 回答
1

添加第二层URLEncoding就可以了。URLEncoding 的想法是防止服务器误解文本字符串中可能存在的任何特殊字符。但是,接收脚本必须期待额外的 urlencode() 层,并相应地采取行动。

或者,如果您知道字符串已被 urlencoded,您不能简单地按原样传递它吗?不需要进一步的 urlencoding。

于 2010-03-12T14:07:38.417 回答
0

或者只是对标题和 URL 进行 urldecode,然后对整个字符串进行 urlencode。

于 2010-03-12T14:09:28.273 回答
0

如前所述,您可以根据需要对 url 进行编码,但您应该知道编码 url 数据的次数越多,它的长度增加得越多,长度可能会增加两倍。如果它太长,这会让用户感到厌烦。某些浏览器上的 url 长度也可能有限制。同样在服务器端,将有开销编码和解码数据。简而言之,您应该在多次编码/解码之前确定您需要它。

于 2010-03-12T15:21:26.900 回答