Анализ параметров запроса 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 )
Ответ 5
вы используете плохой характер? и т.д....
отредактируйте его на новый код
см. ссылки
также вы можете использовать urlencode
$val=urlencode('http://google.com/?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]";
}