web-dev-qa-db-fra.com

Analyse des paramètres de requête GET dans une URL contenant une autre URL

Voici l'URL:

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

Et je ne peux pas obtenir les informations complètes $ _GET ['id'] ou $ _REQUEST ['d'].

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

sorties $ my_url:

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

Alors maintenant, vous pouvez obtenir cette valeur en utilisant $_GET['id'] ou $_REQUEST['id'] (décodé).

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

Sortie

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

Pour obtenir tous les paramètres GET:

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

$key est la clé GET et $value est la valeur GET pour $key.

Ou vous pouvez utiliser une solution alternative pour obtenir un tableau de paramètres 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 est identique à l'url décodé $_GET.

34
Wh1T3h4Ck5

Lors de la création de l’URL, les encoder avec urlencode

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

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

et en allant chercher décoder avec urldecode

9
Shakti Singh

J'ai eu un problème similaire et fini par utiliser parse_url et parse_str, qui tant que l'URL dans le paramètre est correctement encodé dans l'URL (ce qui devrait absolument) vous permet d'accéder à tous les paramètres de l'URL actuelle, ainsi de l'URL codée dans le paramètre de requête, comme suit:

$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 )
2
Simon

Vous devrez peut-être utiliser urlencode sur la chaîne "http://google.com/?var=234&key=234".

2
Extrakun

vous utilisez mauvais caractère comme? et et et etc ...

le modifier en nouveau code 

voir ces liens

aussi vous pouvez utiliser urlencode 

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

La méthode php correcte consiste à utiliser parse_url ()

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

(du manuel php)

Cette fonction analyse une URL et retourne un tableau associatif contenant l’un des composants de l’URL présents.

Cette fonction n'est pas destinée à valider l'URL donnée, elle la divise uniquement en éléments énumérés ci-dessus. Les URL partielles sont également acceptées, parse_url () fait de son mieux pour les analyser correctement.

0
aimiliano