2011-04-13 9 views
15

Oto url:analizowaniem GET parametrów żądania w adresie URL, który zawiera inny URL

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

I nie mogę uzyskać pełny $ _GET [ 'id'] lub $ _REQUEST [ 'd'].

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

spróbuj zdobyć '$ _REQUEST ['klucz']' lub zmień adres URL na 'http: //localhost/test.php? Id = http: //google.com/? Var = 234 & key = 234' – Teneff

+0

@teneff Jak mogę uzyskać wszystkie $ _GET bez określania "id"? – kedomonzter

+0

po prostu użyj '$ _GET' :) jak' print_r ($ _ GET); ' – Teneff

Odpowiedz

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

wyjść $ my_url:

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

Więc teraz można uzyskać tę wartość za pomocą $_GET['id'] lub $_REQUEST['id'] (dekodowane).

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

Wyjście

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

Aby otrzymać każdy parametr GET:

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

$key jest klucz GET i $value to dostać wartość dla $key.

Albo można użyć alternatywnego rozwiązania, aby uzyskać tablicę 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 jest taki sam jak adres URL dekodowane $_GET.

+0

Jak mogę uzyskać wszystkie $ _GET bez określania "identyfikatora"? Czy mogę automatycznie odczytać wszystkie żądania $ _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]); } } Ostrzeżenie! Musisz przetestować, czy (count ($ part)> 1) zanim uzyskasz niezdefiniowane przesunięcie. – Kikiwa

2

Być może trzeba będzie użyć urlencode na strunie 'http://google.com/?var=234 & key = 234'

9

Podczas tworzenia URL zakodować je urlencode

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

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

i podczas pobierania dekodować go do robót urldecode

2

Miałem podobny problem i skończyłem używając parse_url i parse_str, które tak długo, jak adres URL w parametrze jest poprawnie zakodowany z użyciem adresu URL (co zdecydowanie powinno) umożliwia dostęp do obu parametrów rzeczywistego adresu URL, oraz parametrów zakodowanej zawartości w parametrze zapytania, tak jak poniżej:

$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

prawidłowe php sposobem jest użycie parse_url()

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

(z instrukcji php)

Ta funkcja analizuje adres URL i zwraca tablicę asocjacyjną zawierającą dowolny z różnych składników adresu URL, które są obecne.

Ta funkcja nie służy do sprawdzania poprawności podanego adresu URL, tylko dzieli go na powyższe części. Częściowe adresy URL są również akceptowane, parse_url() stara się je poprawnie przeanalizować.

Powiązane problemy