我将URL作为URL参数传递,如下所示:
save_deal.php URL = HTTP:?//my.angieslist.com/thebigdeal/default.aspx的itemid =%2bTZi%2bk0M5%2B8%3D&安培;用户= 1965
在save_deal.php
中,我非常简单地访问url
参数:
$url = $_GET["url"];
但$url
的价值是
http://my.angieslist.com/thebigdeal/default.aspx?itemid= TZi k0M5 8 =
即,奇怪的%2b和其他此类百分比字符已转换为其他字符。如何获得完全相同的字符串而不是此翻译版本(已将百分比字符转换为其他内容)?
答案 0 :(得分:2)
你的问题是,当作为查询字符串参数传递时,URL应该再次编码,使itemid值编码两次 - 一次作为angieslist的参数,而不是作为整个URL的一部分(它本身就是一个查询)字符串参数)。
为了更清楚,创建URL的代码应该类似于:
<?php
$itemid = '+TZi+k0M5+8=';
$angieslist_url = 'http://my.angieslist.com/thebigdeal/default.aspx?itemid=' . urlencode($itemid);
// First of all, the itemid is encoded when passed as a query string argument, resulting in:
// http://my.angieslist.com/thebigdeal/default.aspx?itemid=%2bTZi%2bk0M5%2b8%3d
$savedeal_url = 'save_deal.php?url=' . urlencode($angieslist_url);
// Here, the entire URL is used as an query string argument, which means it should be encoded just like any other argument, resulting in:
// save_deal.php?url=http%3A%2F%2Fmy.angieslist.com%2Fthebigdeal%2Fdefault.aspx%3Fitemid%3D%252BTZi%252Bk0M5%252B8%253D
您的HTTP服务器将负责将查询字符串参数解码回纯文本,这意味着当您阅读$_GET['url']
时,您将无法获得完全编码的URL - 编码的一个“层”将是剥离,产生正确的网址 - http://my.angieslist.com/thebigdeal/default.aspx?itemid=%2bTZi%2bk0M5%2b8%3d
。
答案 1 :(得分:2)
$ _ GET将始终包含规范化和分割值。您可以使用以下命令从QUERY_STRING
恢复原始参数:
$url = substr(strstr($_SERVER["QUERY_STRING"], "url="), 4);
正则表达式会更可靠,只有当?url =参数确实存在且没有其他真实参数时才会有效。