Основы работы с GET запросами в PHP

Раздел: Веб-программирование -> Обработка HTTP-запросов

Основные способы извлечения GET параметров в PHP

Самый распространённый и простой способ получить GET параметры из URL текущей страницы - обратиться к суперглобальному массиву $_GET. Этот массив автоматически заполняется интерпретатором PHP при поступлении HTTP запроса с параметрами в строке запроса.


<?php
// URL: http://example.com/page.php?name=John&age=25
echo $_GET['name']; // John
echo $_GET['age'];  // 25
?>

получить get php (получение get-параметров в php)

Пояснение: Ключи массива соответствуют именам параметров, значения - их содержимому. Все значения являются строками, даже если передано число. Для безопасного доступа к параметру, которого может не быть, используйте оператор isset() или ?? (null coalescing).

Типичные ошибки и решения:

  • Обращение к несуществующему ключу без проверки вызывает PHP уведомление (notice). Используйте isset($_GET['key']) или $_GET['key'] ?? 'default'.
  • Параметры могут содержать специальные символы, которые PHP автоматически декодирует из URL. Однако если нужна дополнительная валидация, применяйте функции фильтрации.
  • Не доверяйте входным данным напрямую - всегда проверяйте и очищайте их перед использованием в SQL запросах, выводе на экран и т.д.

Как получить GET параметр с обязательной проверкой типа и безопасностью?

Для этой цели удобно использовать функцию filter_input(), которая принимает входные данные (INPUT_GET), имя параметра и фильтр.


<?php
$age = filter_input(INPUT_GET, 'age', FILTER_VALIDATE_INT);
if ($age === false || $age === null) {
    echo 'Возраст не указан или некорректен';
} else {
    echo 'Возраст: ' . $age;
}
?>

Php получить html (получение html-кода в php)

Функция возвращает null, если параметр отсутствует, false при не прохождении фильтра, и отфильтрованное значение в случае успеха.

Возможные сложности: Фильтр может быть слишком строгим, и строковое значение '25' будет воспринято как целое. Для строк используйте FILTER_SANITIZE_STRING или FILTER_UNSAFE_RAW с дополнительной проверкой.

Как обработать GET параметры, если доступ к $_GET невозможен (например, в сценарии CLI или при ручном формировании URL)?

Можно вручную разобрать строку запроса с помощью функций parse_url() и parse_str().


<?php
$url = 'http://example.com/page.php?name=John&age=25';
$query = parse_url($url, PHP_URL_QUERY); // 'name=John&age=25'
parse_str($query, $params);
print_r($params);
// Array ( [name] => John [age] => 25 )
?>

Php получить id (получение id в php)

Пояснение: parse_str() автоматически декодирует URL-кодированные символы и может создавать вложенные массивы, если имена параметров содержат квадратные скобки (например, a[0]=1).

Ошибки: Если строка запроса пуста, parse_url вернет null. Всегда проверяйте результат. Также parse_str() может перезаписать существующие переменные - используйте второй аргумент для сохранения в массив.

Как получить сырую строку запроса и распарсить её без использования суперглобальных массивов?

PHP сохраняет полную строку запроса в элементе $_SERVER['QUERY_STRING']. Её можно обработать через explode и urldecode, но проще воспользоваться описанным выше parse_str().


<?php
$query = $_SERVER['QUERY_STRING'] ?? '';
parse_str($query, $params);
echo $params['name'] ?? 'не указано';
?>

получаем url php (получение url в php)

Этот вариант полезен, если требуется изменить или переписать параметры до того, как PHP их обработает.

Предупреждение: $_SERVER['QUERY_STRING'] содержит именно сырой URL, включая символ '#', если он присутствует. Обычно решетка обрезается браузером, но в редких случаях может создавать путаницу.

Как обработать несколько одноимённых GET параметров (например, color=red&color=blue)?

По умолчанию PHP присваивает параметру только последнее значение. Чтобы получить массив значений, нужно завершить имя параметра квадратными скобками: color[]=red&color[]=blue. Тогда $_GET['color'] станет массивом.


<?php
// URL: ?color[]=red&color[]=blue
$colors = $_GET['color'] ?? [];
print_r($colors);
// Array ( [0] => red [1] => blue )
?>

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

Типичная ошибка: Забыть добавить скобки к имени параметра в HTML форме. Проверяйте атрибут name у элементов формы.

- Php получить заголовок (получение заголовка в php)
- Php получить параметры (получение параметров запроса в php)
- Php получить переменные (получение переменных запроса в php)

Расширенные примеры работы с GET параметрами

Пример 1. Обработка массивов параметров с нестандартными ключами

Пример

<?php
// URL: ?product[0][id]=1&product[0][name]=Book&product[1][id]=2&product[1][name]=Pen
$data = $_GET['product'] ?? [];
print_r($data);
?>
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Book
        )
    [1] => Array
        (
            [id] => 2
            [name] => Pen
        )
)

PHP автоматически создает многомерный массив, если имена параметров используют квадратные скобки с числовыми или строковыми ключами.

Пример 2. Фильтрация GET параметров с несколькими правилами

Пример

<?php
// /page.php?search=hello&limit=10
$options = [
    'search' => FILTER_SANITIZE_STRING,
    'limit'  => [
        'filter' => FILTER_VALIDATE_INT,
        'options' => ['min_range' => 1, 'max_range' => 100]
    ]
];
$result = filter_input_array(INPUT_GET, $options);
var_dump($result);
?>
array(2) {
  ["search"]=>
  string(5) "hello"
  ["limit"]=>
  int(10)
}

Если параметр не проходит фильтр, соответствующему ключу будет присвоено false.

Пример 3. Получение GET параметров из произвольного URL (не текущего)

Пример

<?php
function getParamsFromUrl($url) {
    $query = parse_url($url, PHP_URL_QUERY);
    if ($query === null) {
        return [];
    }
    parse_str($query, $params);
    return $params;
}

$params = getParamsFromUrl('https://example.com?name=John&city=NY&age=30');
print_r($params);
?>
Array
(
    [name] => John
    [city] => NY
    [age] => 30
)

Эта функция полезна при обработке внешних ссылок, редиректов или парсинге.

Пример 4. Безопасное чтение параметров с типом по умолчанию

Пример

<?php
// /profile?id=42
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, ['options' => ['default' => 0]]);
if ($id > 0) {
    echo "ID: $id";
} else {
    echo "ID не указан или некорректен";
}
?>
ID: 42

Опция default позволяет задать значение, которое будет возвращено, если параметр не прошел валидацию.

Пример 5. Использование GET параметров в консольном PHP скрипте

Пример

<?php
// Запуск: php script.php name=John age=25
// В CLI нет $_GET, поэтому парсим аргументы командной строки
parse_str(implode('&', array_slice($argv, 1)), $params);
print_r($params);
?>
Array
(
    [name] => John
    [age] => 25
)

При этом важно экранировать спецсимволы в строке запроса при вызове скрипта.

Пример 6. Работа с закодированными параметрами (UTF-8, пробелы)

Пример

<?php
// URL: ?q=%D0%BF%D1%80%D0%B5%D0%B2%D0%B5%D1%82+%D0%BC%D0%B8%D1%80
$query = $_GET['q'] ?? '';
echo urldecode($query); // привет мир
echo $query;            // уже декодировано, но при ручном парсинге потребуется urldecode
?>
привет мир
привет мир

PHP автоматически декодирует URL-кодированные параметры в $_GET, но при использовании $_SERVER['QUERY_STRING'] нужно применять urldecode().

Пример 7. Обработка параметров с нестандартными разделителями

Пример

<?php
// Допустим, параметры приходят разделенные точкой с запятой: key1=val1;key2=val2
$raw = $_SERVER['QUERY_STRING'] ?? '';
$items = explode(';', $raw);
$params = [];
foreach ($items as $item) {
    $parts = explode('=', $item, 2);
    if (count($parts) === 2) {
        $params[urldecode($parts[0])] = urldecode($parts[1]);
    }
}
print_r($params);
?>
Array
(
    [key1] => val1
    [key2] => val2
)

Этот подход используется при кастомных протоколах или устаревших системах.

Получение GET-параметров в PHP - comments

En
получить get php (php)