编码$ _GET变量URL会忽略&符号“&”字符

时间:2012-07-28 04:37:39

标签: php url get

所以我试图从地址栏中获取一个看起来像这样的网址:

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

所以我也不能这样!

3 个答案:

答案 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个单独的参数,由&分隔:

  1. $_GET['name']
    对于您的案例,http://imgur.com/format.jsp?id=738ths3

  2. $_GET['secure']
    对于您的案例,false

  3. 可替换地:

    从您的评论中,您似乎无法控制网址构建。您可以使用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包含两个查询字符串参数:namesecure。查询字符串中的&属于完整网址,而不属于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参数。