我通过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中的值,而不是在检索时转换它?
答案 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
。