Parse str: примеры (PHP)
parse_str(string $string, array &$result = ?): voidФункция parse_str разбирает строку, как если бы она была строкой запроса URL, и помещает полученные переменные в массив или в текущую область видимости. Основное назначение - парсинг данных, передаваемых через GET-запросы или аналогичных строк формата 'ключ=значение'.
Функция имеет два параметра:
- $string (обязательный): строка для разбора. Обычно это строка вида 'name=John&age=30&city=NewYork'.
- $result (необязательный): если этот аргумент предоставлен, переменные сохраняются в этом массиве, а не в глобальной области видимости. Начиная с PHP 7.2, этот параметр стал обязательным в большинстве контекстов использования для улучшения безопасности.
$query = 'name=Alex&age=25&city=Moscow';
parse_str($query, $output);
print_r($output);Array
(
[name] => Alex
[age] => 25
[city] => Moscow
)$query = 'colors[]=red&colors[]=green&info[name]=John';
parse_str($query, $output);
print_r($output);Array
(
[colors] => Array
(
[0] => red
[1] => green
)
[info] => Array
(
[name] => John
)
)$query = 'page=home&action=view';
parse_str($query);
echo $page; // home
echo $action; // viewhome view
Разбирает URL и возвращает его компоненты (хост, путь, запрос и т.д.). Полезно для извлечения строки запроса из полного URL перед использованием parse_str.
Обратная функция, которая генерирует строку запроса URL из массива или объекта. Часто используется вместе с parse_str.
Разбивает строку по разделителю, но не обрабатывает сложные структуры с вложенными массивами и специальными символами, как это делает parse_str.
parse_str предпочтительнее для разбора строк запроса URL со сложной структурой. Для простых пар 'ключ=значение' с простым разделителем может быть достаточно explode. parse_url используется как первый этап для извлечения строки запроса из полного адреса.
// PHP 7.2+
$query = 'page=admin&action=delete';
parse_str($query); // Предупреждение
// Переменные $page и $action не создаются в текущей области видимостиWarning: parse_str(): Calling parse_str() without the result argument is deprecated
$query = 'name=John Doe&age=30'; // Пробел не закодирован
parse_str($query, $output);
print_r($output);Array
(
[name] => John Doe
[age] => 30
)Пробелы и специальные символы должны быть правильно закодированы с помощью urlencode().
$data = 'important=original';
$important = 'critical value';
parse_str($data); // Устаревший способ
// Переменная $important будет перезаписанаЭтого можно избежать, используя второй параметр.
Использование parse_str() без второго параметра стало выдавать предупреждение об устаревании (E_DEPRECATED). Это изменение направлено на улучшение безопасности, чтобы избежать непреднамеренного создания переменных в глобальной области видимости.
Функция была модифицирована для более строгой обработки ошибок. Улучшена совместимость с современными стандартами разбора URL.
$query = 'user[name]=John&user[contacts][email]=john@example.com&ids[]=1&ids[]=2';
parse_str($query, $result);
print_r($result);Array
(
[user] => Array
(
[name] => John
[contacts] => Array
(
[email] => john@example.com
)
)
[ids] => Array
(
[0] => 1
[1] => 2
)
)$query = 'title=Hello%20World%21&price=100%24';
parse_str($query, $result);
print_r($result);Array
(
[title] => Hello World!
[price] => 100$
)$url = 'https://example.com/page?action=view&id=123&filter[name]=John';
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $params);
print_r($params);Array
(
[action] => view
[id] => 123
[filter] => Array
(
[name] => John
)
)$original = 'name=John&age=30';
parse_str($original, $parsed);
$restored = http_build_query($parsed);
echo $restored;name=John&age=30
$query = 'color=red&color=blue&color=green';
parse_str($query, $result);
print_r($result);Array
(
[color] => green
)Последнее значение перезаписывает предыдущие. Для сохранения всех значений используйте синтаксис с квадратными скобками.
from urllib.parse import parse_qs
query = 'name=Alex&age=25'
result = parse_qs(query)
print(result) # {'name': ['Alex'], 'age': ['25']}{'name': ['Alex'], 'age': ['25']}Отличие: по умолчанию возвращает значения в виде списков.
const query = 'name=Alex&age=25';
const params = new URLSearchParams(query);
console.log(params.get('name')); // Alex
console.log(params.get('age')); // 25Alex 25
Отличие: объектно-ориентированный интерфейс, не создает многомерные массивы автоматически.
В MySQL нет встроенной функции для разбора строк запроса. Обычно это делается на уровне приложения или с помощью пользовательских функций.