这是网址:
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
?>
答案 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_url
和parse_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)
将其编辑为新代码
请参阅此链接
你也可以使用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]";
}