PHP - URL GET变量问题

时间:2012-02-24 06:18:49

标签: php

我通过GET变量传递URL。当我在下一页上回显变量时,它会显示没有特殊字符的URL。例如,请使用URL:

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中的值,而不是在检索时转换它?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

这样做:

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

答案 2 :(得分:0)

在构建upload?url=...路径时,请考虑对网址进行urlencoding,这会为http://www.test.com/this%20is%20the%20image.jpg?with=some&additional=parameters等网址添加更多灵活性。

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

有关如何对变量进行urlencode,请参阅http://php.net/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.com请求的一部分{1}}或test.com(btw,$_GET['url']在这种情况下将包含http://test.com/somepath?somevar=someval