Анализ параметров запроса GET в URL-адресе, который содержит другой URL-адрес

Вот URL:

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

Ответы

Ответ 1

$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 - значение GET для $key.

Или вы можете использовать альтернативное решение для получения массива параметров 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 совпадает с расшифровкой url $_GET.

Ответ 2

При создании URL-кода закодируйте их с помощью urlencode

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

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

и при извлечении декодирует его urldecode

Ответ 3

Возможно, вам придется использовать urlencode в строке 'http://google.com/?var=234&key=234

Ответ 4

У меня была аналогичная проблема, и в итоге я использовал parse_url и parse_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 )

Ответ 6

Правильный способ php - использовать parse_url()

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

(из руководства php)

Эта функция анализирует URL-адрес и возвращает ассоциативный массив, содержащий любой из различных компонентов URL-адреса, которые присутствуют.

Эта функция не предназначена для проверки данного URL-адреса, но только разбивает ее на перечисленные выше части. Частичные URL-адреса также принимаются, parse_url() пытается наилучшим образом проанализировать их.

Ответ 7

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]";
}