URL作为URL的获取参数 - “&”的问题

时间:2011-03-27 14:09:41

标签: php url-encoding

有脚本接收另一个URL作为GET参数:

script.php?file=http://www.google.com&id=123

问题是:
当url有参数本身时,它被用作脚本的参数,而不是url的参数:

script.php?file=http://www.google.com?q=adsf&lang=en&id=123

网址为http://www.google.com?q=adsf&lang=en,但在&之后会被切断,因为它被视为与script.php本身相关。

我该怎么办?
我厌倦了将&替换为%26,但是网址会被破坏。

3 个答案:

答案 0 :(得分:2)

您需要使用percent-encoding编码值。

如果您使用的是PHP,请使用rawurlencode(如果需要urlencode,则使用application/x-www-form-urlencoded):

$url = 'http://www.google.com?q=adsf&lang=en';
echo 'script.php?file='.rawurlencode($url);

答案 1 :(得分:2)

您需要将作为参数传递的整个网址URL编码到另一个网址(您的脚本)。 %26是&的正确编码。在使用之前,请确保在服务器端解码。你没有说出你正在使用的语言,但大多数情况下,javascript和php都有本机URL编码功能。

答案 2 :(得分:2)

尝试对每个特殊字符进行编码,如下所示:

script.php?file=http%3a%2f%2fwww.google.com%3fq%3dadsf%26lang%3den&id=123

尽管使用rawurlencode()可能更好更容易。

另请阅读有关网址编码的this