2012-02-24 117 views
2

我通过一个GET变量传递一个URL。当我在下一页回显变量时,它会显示没有特殊字符的URL。例如,拿网址:PHP - URL GET变量问题

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中,而不是在r上转换etrieval?

回答

3

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

+0

谢谢,这很好! – Lukas 2012-02-24 06:33:27

1

这样做:

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

你的代码会输出以下路径:'http://example.com/upload?url = http://test.com/somepath?somevar = someval&somevar2 = someval2'? – penartur 2012-02-24 06:34:48

+0

对!无法为此执行“urlencode”。我的解决方法是错误的。 – skyronic 2012-02-24 06:48:27

+0

这是错误的,以及通过请求字符串传递非urlencoded值的整个方法。 – penartur 2012-02-24 06:56:13

0

考虑构建upload?url=...路径时代替,这将增加更多的灵活性与网址一样http://www.test.com/this%20is%20the%20image.jpg?with=some&additional=parameters URL编码的URL。

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

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

+0

这是一个API,所以我希望链接只是简单地粘贴,以保持简单。 – Lukas 2012-02-24 06:35:13

+0

我的答案正是让事情更简单。 $ _GET变量将包含你想要的url,而不需要从请求字符串中解析它。顺便说一句,你不应该首先手动创建请求字符串(而不是从数组编译它),但不幸的是PHP不提供这样做的内置工具。 – penartur 2012-02-24 06:38:33

+0

顺便说一下,我的回答给出了与

'这只是将变量存储在GET请求中的方式,而不是以其他非标准,不完整和不兼容的方式存储变量,然后想要获取原始值在以非标准方式进行解析之后,您不需要使用标准编码,而是发明了自己的并且克服了其缺点。 – penartur 2012-02-24 06:41:12