2011-04-13 243 views
15

这里是一个URL网址:解析GET请求参数中包含另一个URL

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

我不能得到充分的$ _GET [ '身份证']或$ _REQUEST [ 'd']。

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

尝试获取'$ _REQUEST ['key']'或将URL更改为'http://localhost/test.php?id=http://google.com/?var = 234 & key = 234' – Teneff 2011-04-13 06:50:13

+0

@teneff如何获得所有$ _GET而不指定'id'? – kedomonzter 2011-04-13 07:28:22

+0

只需使用'$ _GET' :)就像'print_r($ _ GET);' – Teneff 2011-04-13 08:16:50

回答

33
$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数组PARAMS

$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是相同的URL解码$_GET

+0

如何在不指定'id'的情况下获得所有$ _GET?这样我可以自动读取所有$ _GET请求? – kedomonzter 2011-04-13 07:29:40

+1

$get_parameters = array(); if (isset($_SERVER['QUERY_STRING'])) { $pairs = explode('&', $_SERVER['QUERY_STRING']); foreach($pairs as $pair) { $part = explode('=', $pair); $get_parameters[$part[0]] = urldecode($part[1]); } } 警告!在得到一些未定义的偏移量之前,你必须测试if(count($ part)> 1)。 – Kikiwa 2013-08-29 08:42:37

2

您可能需要使用的字符串urlencode 'http://google.com/?var=234 &键= 234'

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

我有一个类似的问题,最终使用parse_urlparse_str,只要参数中的URL是正确的url编码(它绝对应该)允许您访问实际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) 
-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]"; 
} 
0

正确的PHP的方式是使用parse_url()

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

(来自php手册)

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

这个函数并不是要验证给定的URL,它只是把它分解成上面列出的部分。部分网址也被接受,parse_url()会尽力解析它们。