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