Включение массивов в запросы URI

Некоторые эзотерические явления кода для вас сегодня… В этом посте я объясняю, как PHP обрабатывает массивы, когда они включены в URL запросах (через строку запроса). Это то, чего я не понимал до тех пор, пока не занялся глубокой разработкой своего профессионального плагина брандмауэра WordPress. Теперь давайте начнем…

Передача массивов через строку запроса

При создании URL-адреса вы можете включить массив значений в качестве параметров строки запроса, например, так:

Literal: http://example.com/?paged=1&post[]=1179&post[]=1178
Encoded: http://example.com/?paged=1&post%5B%5D=1179&post%5B%5D=1178

Другими словами, если у нас есть следующий массив:

$post = array('1179', '1178');

Это эквивалентно следующему параметру строки запроса:

post[]=1179&post[]=1178

Мы можем получить этот массив через PHP, используя $_GET['post'].

Другой пример, рассмотрим этот простой массив:

array(1, 2, 3, 4, 5)

… это будет записано как:

array[]=1&array[]=2&array[]=3&array[]=4&array[]=5

И мы можем получить этот массив через PHP, используя $_GET['array'].

В основном это то, что мы рассматриваем в этой статье. Когда-то я думал, что подобные запросы GET рассматриваются PHP как строки. Как же я ошибался…

Получение массивов через строку запроса

Чтобы понять, как принимать/интерпретировать массивы, передаваемые через строку запроса, создайте файл с именем test.php и добавьте в него следующий код:

if (is_array($_GET['post'])) die(var_dump($_GET['post']));

После загрузки файла на ваш сервер, зайдите в браузер и запросите следующее URI:

http://example.com/test.php?paged=1&post[]=1179&post[]=1178

Результат будет примерно таким:

array(2) { [0]=> string(4) "1179" [1]=> string(9) "1178" }

Затем повторите тест, используя кодированный массив, и результаты должны быть такими же. Итак, мораль этой истории такова: вы можете отправить массив по протоколу HTTP запросы, как в буквальном, так и в кодированном виде. Надеюсь, этот пост прольет свет на эту эзотерическую функциональность.

Кстати, если уж на то пошло, мой плагин BBQ Pro правильно анализирует массивы строк запросов (как буквальные, так и закодированные) во всех типах запросов: GET, POST, PUT, DELETE и т.д. Так что плохие парни ничего не протащат через массивы строк запросов 😉

Оцените статью
devanswers.ru
Добавить комментарий