Получить параметр URL в PHP


190

Я пытаюсь передать URL-адрес в качестве параметра URL в PHP, но когда я пытаюсь получить этот параметр, я ничего не получаю

Я использую следующую форму URL:

http://localhost/dispatch.php?link=www.google.com

Я пытаюсь пройти через это:

$_GET['link'];

Но ничего не вернулось. В чем проблема?


15
Покажите свой полный код
Pekka

3
сделать var_dumpиз $_GETparam, он должен быть там
Нафтали ака Нил

1
делает $_REQUEST['link']работу? Также имейте в виду, что индексный ключ linkчувствителен к регистру того, что находится в URL.
Dutchie432

Вы на самом деле не пытаетесь, $_GETно, случается, публикуете, не так ли?
Джеймс

И каково было решение этого? Имея ту же проблему
Ixx

Ответы:


283

$_GETэто не функция или языковая конструкция - это просто переменная (массив). Пытаться:

<?php
echo $_GET['link'];

В частности, это суперглобальный : встроенная переменная, которая заполняется PHP и доступна во всех областях (вы можете использовать ее внутри функции без ключевого слова global ).

Поскольку переменная может не существовать, вы можете (и должны) убедиться, что ваш код не вызывает уведомления с помощью:

<?php
if (isset($_GET['link'])) {
    echo $_GET['link'];
} else {
    // Fallback behaviour goes here
}

В качестве альтернативы, если вы хотите пропустить проверки индекса вручную и, возможно, добавить дополнительные проверки, вы можете использовать расширение фильтра :

<?php
echo filter_input(INPUT_GET, 'link', FILTER_SANITIZE_URL);

И последнее, но не менее важное: вы можете использовать оператор объединения нулей (доступен с PHP / 7.0 ) для обработки пропущенных параметров:

echo $_GET['link'] ?? 'Fallback value';

14
Если вы ничего не имеете с этим, как я, чем вы должны знать, что «ссылка» является именем переменной в URL-адресе! Так и с $ _GET ['link']; Вам нужно ввести URL-адрес примерно так: localhost /? link = test
Firzen

Я использую WAMP, localhostи это решение не работает. http://localhost/station?type=2 echo $_GET['type'];этоnull
NineCattoRules

Наконец то использовал parse_str(parse_url($actual_link)['query'], $params);. Дополнительная информация stackoverflow.com/a/11480852/4458531
NineCattoRules

Вы говорите: «$ _GET - это не функция или языковая конструкция - это просто переменная (массив)», но мы не обращаемся к значениям через индекс, вместо этого вы обращаетесь к значениям через строку. Это больше словарь, чем массив?
ScottyBlades

1
@ScottyBlades Я говорю в контексте структур данных PHP. В PHP массив представляет собой упорядоченный список комбинаций ключ / значение. Это отличается от того, что другие языки (например, C или JavaScript) называют «массивом».
Альваро Гонсалес,

27

Пожалуйста, оставьте свой код,

<?php
    echo $_GET['link'];
?>

или

<?php
    echo $_REQUEST['link'];
?>

делай работу ...




10

Принятый ответ хорош. Но если у вас есть такой сценарий:

http://www.mydomain.me/index.php?state=California.php#Berkeley

Вы можете рассматривать именованный якорь как строку запроса следующим образом:

http://www.mydomain.me/index.php?state=California.php&city=Berkeley

Затем получите к нему доступ так:

$Url = $_GET['state']."#".$_GET['city'];

3

Я ничего не получал $_GET["..."](например, print_r($_GET)дал пустой массив), но $_SERVER['REQUEST_URI']показал, что вещи должны быть там. В конце концов оказалось, что я только зашел на веб-страницу, потому что мой .htaccess перенаправлял ее туда (мой обработчик 404 был тем же файлом .php, и я сделал опечатку в браузере при тестировании).

Простое изменение имени означало, что тот же самый php-код сработал, как только не началось перенаправление 404!

Так что есть способы, $_GET которые ничего не могут вернуть, даже если код php может быть правильным.



0

Кто бы ничего не получил обратно, я думаю, он просто должен заключить результат в HTML-теги,

Как это:

<html>
<head></head>
<body>
<?php
echo $_GET['link'];
?>
<body>
</html>

5
Нет, HTML-теги не нужны. Простой текст отображается всеми браузерами.
MarcoS

-1

Как сказал Альваро, $ _GET - это не функция, а массив, содержащий параметры. Таким образом, вы можете извлечь один элемент из этого массива, используя

<?php
$link = $_GET['link'];
echo $link;
?>

Ожидаемый ОП:

www.google.com
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.