在包含其他URL的URL中解析GET请求参数

时间:2011-04-13 06:47:00

标签: php get request urlencode

这是网址:

http://localhost/test.php?id=http://google.com/?var=234&key=234

我无法获得完整的$ _GET ['id']或$ _REQUEST ['d']。

<?php
print_r($_REQUEST['id']); 
//And this is the output http://google.com/?var=234
//the **&key=234** ain't show 
?>

7 个答案:

答案 0 :(得分:35)

$get_url = "http://google.com/?var=234&key=234";
$my_url = "http://localhost/test.php?id=" . urlencode($get_url);

$ my_url输出:

http://localhost/test.php?id=http%3A%2F%2Fgoogle.com%2F%3Fvar%3D234%26key%3D234

现在,您可以使用$_GET['id']$_REQUEST['id'](已解码)获取此值。

echo urldecode($_GET["id"]);

输出

http://google.com/?var=234&key=234

获取每个GET参数:

foreach ($_GET as $key=>$value) {
  echo "$key = " . urldecode($value) . "<br />\n";
  }

$key是GET密钥,$value$key的GET值。

或者您可以使用替代解决方案来获取GET参数数组

$get_parameters = array();
if (isset($_SERVER['QUERY_STRING'])) {
  $pairs = explode('&', $_SERVER['QUERY_STRING']);
  foreach($pairs as $pair) {
    $part = explode('=', $pair);
    $get_parameters[$part[0]] = sizeof($part)>1 ? urldecode($part[1]) : "";
    }
  }

$get_parameters与网址解码$_GET相同。

答案 1 :(得分:9)

创建网址时会使用urlencode

对其进行编码
$val=urlencode('http://google.com/?var=234&key=234')

<a href="http://localhost/test.php?id=<?php echo $val ?>">Click here</a>

并在使用urldecode

获取解码时

答案 2 :(得分:2)

您可能必须在字符串“http://google.com/?var=234&key=234”上使用urlencode

答案 3 :(得分:2)

我遇到了类似的问题并最终使用了parse_urlparse_str,只要参数中的网址正确地进行了网址编码(肯定应该这样),就可以访问所有实际URL的参数,以及查询参数中编码的URL的参数,如下所示:

$get_url = "http://google.com/?var=234&key=234";
$my_url = "http://localhost/test.php?id=" . urlencode($get_url);

function so_5645412_url_params($url) {
    $url_comps = parse_url($url);
    $query = $url_comps['query'];

    $args = array();
    parse_str($query, $args);

    return $args;
}

$my_url_args = so_5645412_url_params($my_url); // Array ( [id] => http://google.com/?var=234&key=234 )
$get_url_args = so_5645412_url_params($my_url_args['id']); // Array ( [var] => 234, [key] => 234 )

答案 4 :(得分:1)

你使用不好的角色吗?和&amp;等等......

将其编辑为新代码

请参阅此链接

你也可以使用urlencode

$val=urlencode('http://google.com/?var=234&key=234')

答案 5 :(得分:0)

正确的php方法是使用parse_url()

http://php.net/manual/en/function.parse-url.php

(来自php手册)

此函数解析URL并返回一个关联数组,其中包含存在的URL的各种组件。

此功能并不是为了验证给定的URL,而是将其分解为上面列出的部分。部分URL也被接受,parse_url()会尽力正确解析它们。

答案 6 :(得分:-1)

if (isset($_SERVER['HTTPS'])){
    echo "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]$_SERVER[QUERY_STRING]";
}else{
    echo "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]$_SERVER[QUERY_STRING]";
}