Параметры URL в PHP: как обрабатывать данные форм

Раздел: Веб-разработка на PHP -> Работа с URL в PHP

Основы работы с URL формами в PHP

При передаче данных через HTTP-формы методом GET или при формировании ссылок с параметрами возникает необходимость корректно создавать и разбирать URL. PHP предоставляет встроенные функции для этих задач. Рассмотрим наиболее эффективное решение и альтернативные подходы.

Эффективное создание и разбор строк запроса с помощью http_build_query и parse_str

Функция http_build_query преобразует массив в URL-кодированную строку запроса. Обратная операция выполняется функцией parse_str.

$params = ['name' => 'Иван', 'age' => 30];
$query = http_build_query($params);
// $query = "name=%D0%98%D0%B2%D0%B0%D0%BD&age=30"

Php создание ссылки (создание ссылки в php)

Для разбора строки запроса в массив:

$query = "name=Иван&age=30";
parse_str($query, $output);
print_r($output);
/* Результат:
Array
(
    [name] => Иван
    [age] => 30
)*/

Php текущая url (текущая url в php)

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

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

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

$params = ['name' => 'Иван', 'age' => 30];
$parts = [];
foreach ($params as $key => $value) {
    $parts[] = urlencode($key) . '=' . urlencode($value);
}
$query = implode('&', $parts);

Mobile php url (мобильный url в php)

Проблема: не учитываются массивы (например, name[]). Для массивов потребуется отдельная обработка.

Как извлечь параметры из полного URL с помощью parse_url?

Функция parse_url разбивает URL на компоненты. Для получения строки запроса используется константа PHP_URL_QUERY.

$url = "https://example.com/page?name=Иван&age=30";
$queryString = parse_url($url, PHP_URL_QUERY);
parse_str($queryString, $params);
print_r($params);

Php open url (открытие url в php)

Ошибка: если URL содержит фрагмент (#), parse_url может некорректно обработать. Рекомендуется сначала удалить фрагмент или использовать фильтрацию.

Как передать массив через URL в форме?

HTML форма с полями name[] создаст в PHP массив $_GET['name']. Для явного формирования такого URL используется стандартная нотация.

// Формирование
$params = ['name' => ['Иван', 'Петр']];
$query = http_build_query($params);
// Результат: name%5B0%5D=%D0%98%D0%B2%D0%B0%D0%BD&name%5B1%5D=%D0%9F%D0%B5%D1%82%D1%80
// В браузере это будет name[]=Иван&name[]=Петр после декодирования

Js php url (javascript и php url)

Проблема: разные браузеры могут по-разному кодировать квадратные скобки. PHP автоматически обрабатывает их при получении.

Как безопасно получить параметры с помощью filter_input?

Для получения параметров с фильтрацией (например, проверка целого числа) используется filter_input.

$age = filter_input(INPUT_GET, 'age', FILTER_VALIDATE_INT);
if ($age === false) {
    // обработка ошибки
}

Ошибка: filter_input возвращает null если параметр отсутствует, false если не прошёл валидацию. Важно различать.

- Php url query (url-запрос (query string) в php)
- Include php url (включение url через include в php)
- Engine php url (движок url в php)

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

Пример 1: Создание URL с несколькими массивами и вложенными ключами.

Пример
$data = [
    'user' => [
        'name' => 'Иван',
        'hobbies' => ['футбол', 'книги']
    ],
    'page' => 1
];
$query = http_build_query($data, '', '&', PHP_QUERY_RFC3986);
echo $query;
// user%5Bname%5D=%D0%98%D0%B2%D0%B0%D0%BD&user%5Bhobbies%5D%5B0%5D=%D1%84%D1%83%D1%82%D0%B1%D0%BE%D0%BB&user%5Bhobbies%5D%5B1%5D=%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8&page=1
user%5Bname%5D=%D0%98%D0%B2%D0%B0%D0%BD&user%5Bhobbies%5D%5B0%5D=%D1%84%D1%83%D1%82%D0%B1%D0%BE%D0%BB&user%5Bhobbies%5D%5B1%5D=%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8&page=1

Пример 2: Использование http_build_query с числовым префиксом и пользовательским разделителем.

Пример
$params = ['name' => 'Иван', 'age' => 30];
$query = http_build_query($params, 'param_', '&');
echo $query;
// param_name=%D0%98%D0%B2%D0%B0%D0%BD&param_age=30
param_name=%D0%98%D0%B2%D0%B0%D0%BD&param_age=30

Пример 3: Декодирование URL с использованием rawurldecode и обработка ошибок.

Пример
$encoded = "name=%D0%98%D0%B2%D0%B0%D0%BD&age=30";
$decoded = rawurldecode($encoded);
// Внимание: rawurldecode не обрабатывает + как пробел, используйте urldecode если нужно
echo $decoded;
// name=Иван&age=30
name=Иван&age=30

Пример 4: Получение параметров из URL с учетом фрагмента (якоря).

Пример
$url = "https://example.com/page?name=Иван#section";
$parsed = parse_url($url);
$query = $parsed['query'] ?? '';
$fragment = $parsed['fragment'] ?? '';
parse_str($query, $params);
echo "Параметры: " . print_r($params, true) . ", фрагмент: $fragment";
Параметры: Array ( [name] => Иван ), фрагмент: section

Пример 5: Использование filter_input_array для массовой фильтрации.

Пример
$filters = [
    'name' => FILTER_SANITIZE_STRING,
    'age' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 1, 'max_range' => 120]],
    'email' => FILTER_VALIDATE_EMAIL
];
$inputs = filter_input_array(INPUT_GET, $filters);
print_r($inputs);
Array ( [name] => Иван [age] => 30 [email] => false )

URL формы в PHP - comments

En
Url form php (php)