Отримати параметр URL в PHP


190

Я намагаюся передати URL як параметр url у php, але коли я намагаюся отримати цей параметр, я нічого не отримую

Я використовую таку форму URL:

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

Я намагаюся це пережити:

$_GET['link'];

Але нічого не повернулося. В чому проблема?


15
Покажіть свій повний код
Pekka

3
робити var_dumpз $_GETпар, він повинен бути там
Нафталі аку Neal

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

Ви насправді не намагаєтеся, $_GETале трапляєтесь, щоб розміщувати повідомлення, чи не так?
Джеймс

І яке це було рішення? З тією ж проблемою
Ixx

Відповіді:


283

$_GETне є функцією чи мовною конструкцією - це просто змінна (масив). Спробуйте:

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

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

Оскільки змінна може не існувати, ви можете (і повинні) переконатися, що ваш код не викликає повідомлення з:

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