PHP-URL GET变量问题


PHP - URL GET Variable Issues

我正在通过一个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

如何准确地获得URL中get变量的值,并且在检索时不进行转换?

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

这样做:

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

在构造upload?url=...路径时考虑对url进行url编码,这将为使用http://www.test.com/this%20is%20the%20image.jpg?with=some&additional=parameters等url增加更多灵活性。

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

请参阅http://php.net/urlencode了解如何对变量进行url编码。

示例:

带有链接的页面

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这样的url,并且很难判断somevar2是对example.com还是对test.com的请求的一部分(顺便说一句,在这种情况下,$_GET['url']将包含http://test.com/somepath?somevar=someval)。