所以我试图从地址栏中获取一个看起来像这样的网址:
http://mysite.com/url.php?name=http://test.com/format.jsp?id=738ths3&secure=false
我正在使用$ _GET变量直接读取它,我的代码如下
$arc = rawurlencode($_GET['name']);
echo "URL: $arc";
这只会返回
URL: http://imgur.com/format.jsp?id=738ths3
缺少& secure = false
我希望它看起来:
URL: http://test.com/format.jsp?id=738ths3&secure=false
我已经尝试过urlencode,rawurlencode无济于事,我已经在google上查了一些论坛和stackoverflow没有答案的帮助,任何想法?谢谢!
urlencode显示了这个:
网址:http%3A%2F%2Ftest.com
所以我也不能这样!
答案 0 :(得分:8)
在构建网址之前,您需要urlencode()
,即:
$url = "http://mysite.com/url.php?name=".urlencode('http://test.com/format.jsp?id=738ths3&secure=false');
这样,您就可以从name
获取完整的网址作为$_GET['name']
GET参数。
在构造URL时没有urlencode()
,PHP会将其视为2个单独的参数,由&
分隔:
$_GET['name']
对于您的案例,http://imgur.com/format.jsp?id=738ths3
$_GET['secure']
对于您的案例,false
从您的评论中,您似乎无法控制网址构建。您可以使用http_build_query
在单个字符串中获取完整的$_GET
:
$name = http_build_query($_GET);
然后您将获得:
echo $name; // name=http://test.com/format.jsp?id=738ths3&secure=false
// which you would then may want to strip away the first 'name='
$name = substr($name, strlen('name='));
echo $name; // to obtain http://test.com/format.jsp?id=738ths3&secure=false
答案 1 :(得分:1)
原始网址http://mysite.com/url.php?name=http://test.com/format.jsp?id=738ths3&secure=false
包含两个查询字符串参数:name
和secure
。查询字符串中的&
属于完整网址,而不属于name
参数中的网址。
如果您可以控制此值,则在声明链接/ URL时,使用PHP的urlencode()
对全名值进行编码,例如:
$url = "http://mysite.com/url.php?name=" . urlencode("=http://test.com/format.jsp?id=738ths3&secure=false");
这将对name
参数进行正确编码,您的$arc = $_GET['name'];
将根据需要生效。
如果您无法控制设置值并且只是解析您正在接收的内容,则可以在name=
参数上拆分给定的字符串,并假设其后的所有内容都是{{1}的一部分}:
name
要解码编码后的网址,请在访问后使用PHP的urldecode()
:
$splitQuery = split('name=', $_SERVER['REQUEST_URI']);
$arc = $splitQuery[1];
答案 2 :(得分:0)
如果您无法对URL进行编码,则可以使用以下代码获取当前URI:
$url = $_SERVER["REQUEST_URI"];
在你的情况下,$ url是:
/url.php?name=http://test.com/format.jsp?id=738ths3&secure=false
然后你可以用爆炸拆分它并验证它并从中获取GET参数。