2011-04-13 1 views
15

Вот это адрес:Синтаксический GET параметры запроса в 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 
?> 
+2

попытайтесь получить '$ _REQUEST ['key']' или изменить URL на 'http: //localhost/test.php? Id = http: //google.com/? Var = 234 & key = 234' – Teneff

+0

@teneff Как я могу получить все $ _GET без указания «id»? – kedomonzter

+0

просто используйте '$ _GET' :) вроде' print_r ($ _ GET); ' – Teneff

ответ

33
$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 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 такой же, как URL декодируется $_GET.

+0

Как я могу получить все $ _GET без указания «id»? Чтобы я мог автоматически читать весь запрос $ _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]); } } Предупреждение! Вы должны проверить, если (count ($ part)> 1), прежде чем получить некоторое неопределенное смещение. – Kikiwa

2

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

9

При создании 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

2

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

правильный путь РНР использовать parse_url()

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

(from php manual)

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

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