2011-04-13 35 views
15

Aquí está la url:de análisis de parámetros de la petición GET en una dirección URL que contiene otra URL

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

Y no puede obtener el $ _GET completo [ 'id'] o $ _REQUEST [ 'd'].

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

intente obtener '$ _REQUEST ['clave']' o cambie la URL a 'http: //localhost/test.php? Id = http: //google.com/? Var = 234 & clave = 234' – Teneff

+0

@teneff ¿Cómo puedo obtener $ _GET sin especificar el 'id'? – kedomonzter

+0

simplemente use '$ _GET' :) como' print_r ($ _ GET); ' – Teneff

Respuesta

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

salidas $ my_url:

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

Así que ahora usted puede conseguir este valor utilizando $_GET['id'] o $_REQUEST['id'] (decodificado).

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

salida

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

para conseguir cada parámetro GET:

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

$key es obtener la clave y $value es conseguir el valor para $key.

O puede utilizar una solución alternativa para conseguir variedad de 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 es igual que decodifica URL $_GET.

+0

¿Cómo puedo obtener $ _GET sin especificar el 'id'? ¿Para que pueda leer automáticamente toda la solicitud $ _GET? – kedomonzter

+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]); } } ¡Advertencia! Tienes que probar si (contar ($ parte)> 1) antes de obtener una compensación indefinida. – Kikiwa

2

Puede que tenga que utilizar urlencode en la cadena 'http://google.com/?var=234 & clave = 234'

9

al crear la URL los codificará con urlencode

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

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

y al recuperar la decodificarlo y con todas urldecode

2

que tenía un problema similar y terminó usando parse_url y parse_str, que, siempre y cuando esté correctamente URL codificada la dirección URL en el parámetro (que definitivamente debería) le permite acceder tanto a todos los parámetros de la URL real, como así como los parámetros de la URL codificada en el parámetro de consulta, así:

$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

la forma php correcta es utilizar parse_url()

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

(del manual php)

Esta función analiza una URL y devuelve una matriz asociativa que contiene cualquiera de los diversos componentes de la URL que están presentes.

Esta función no está destinada a validar la URL dada, solo la divide en las partes mencionadas anteriormente. También se aceptan direcciones URL parciales, parse_url() hace lo mejor para analizarlas correctamente.

Cuestiones relacionadas