webentwicklung-frage-antwort-db.com.de

Analysieren von GET-Anforderungsparametern in einer URL, die eine andere URL enthält

Hier ist die URL:

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

Und ich kann nicht die vollen $ _GET ['id'] oder $ _REQUEST ['d'] erhalten.

<?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);

$ my_url Ausgaben:

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

Sie können diesen Wert jetzt mit $_GET['id'] oder $_REQUEST['id'] (dekodiert) abrufen.

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

Ausgabe

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

Um jeden GET-Parameter zu erhalten:

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

$key ist GET-Schlüssel und $value ist GET-Wert für $key.

Oder Sie können eine alternative Lösung verwenden, um ein Array von GET-Parametern zu erhalten

$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 ist identisch mit der dekodierten URL $_GET.

34
Wh1T3h4Ck5

Beim Erstellen von URLs kodieren Sie sie mit urlencode

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

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

und während des Abrufs decodieren Sie es mit urldecode

9
Shakti Singh

Ich hatte ein ähnliches Problem und endete mit parse_url und parse_str, was bedeutet, dass die URL im Parameter korrekt mit URL kodiert ist (was definitiv der Fall sein sollte), und dass Sie auf alle Parameter der aktuellen URL sowie auf die Parameter zugreifen können der verschlüsselten URL im Abfrageparameter wie folgt:

$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

Möglicherweise müssen Sie urlencode in der Zeichenfolge "http://google.com/?var=234&key=234" verwenden.

2
Extrakun

du verwendest einen schlechten Charakter? und & und etc ...

bearbeiten Sie es in neuen Code 

siehe diese Links

du kannst auch urlencode verwenden 

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

Die korrekte PHP-Methode ist die Verwendung von parse_url ().

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

(aus dem php-Handbuch)

Diese Funktion analysiert eine URL und gibt ein assoziatives Array zurück, das eine der verschiedenen vorhandenen Komponenten der URL enthält.

Diese Funktion ist nicht dazu gedacht, die angegebene URL zu überprüfen, sondern teilt sie nur in die oben aufgeführten Teile auf. Teil-URLs werden ebenfalls akzeptiert. Parse_url () versucht, sie korrekt zu analysieren.

0
aimiliano