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

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

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

можно всегда быть обратно совместимыми, но не вперед совместимыми.

107
задан Donald Duck 27 November 2017 в 22:35
поделиться

4 ответа

Есть очень простое решение: http_build_query () . Он принимает параметры вашего запроса в виде ассоциативного массива:

$data = array(
    1,
    4,
    'a' => 'b',
    'c' => 'd'
);
$query = http_build_query(array('aParam' => $data));

вернет

string(63) "aParam%5B0%5D=1&aParam%5B1%5D=4&aParam%5Ba%5D=b&aParam%5Bc%5D=d"

http_build_query () обрабатывает все необходимые экранирования для вас (% 5B => [ и % 5D => ] ), поэтому эта строка равна aParam [0] = 1 & aParam [1] = 4 & aParam [a] = b & aParam [c] = d .

209
ответ дан 24 November 2019 в 03:37
поделиться

Изменить: Не пропустите решение Стефана выше, в котором используется очень удобная функция http_build_query () : https://stackoverflow.com/ a / 1764199/179125

knittl прав в отношении побега. Однако есть более простой способ сделать это:

$url = 'http://example.com/index.php?';
$url .= 'aValues[]=' . implode('&aValues[]=', array_map('urlencode', $aValues));

Если вы хотите сделать это с ассоциативным массивом, попробуйте вместо этого следующее:

PHP 5.3+ (лямбда-функция)

$url = 'http://example.com/index.php?';
$url .= implode('&', array_map(function($key, $val) {
    return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
  },
  array_keys($aValues), $aValues)
);

PHP <5.3 (обратный вызов)

function urlify($key, $val) {
  return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
}

$url = 'http://example.com/index.php?';
$url .= implode('&amp;', array_map('urlify', array_keys($aValues), $aValues));
55
ответ дан 24 November 2019 в 03:37
поделиться

Самый простой Можно было бы использовать функцию сериализации .

Она сериализует любую переменную для хранения или передачи. Вы можете прочитать об этом в руководстве php - сериализация

Переменная может быть восстановлена ​​с помощью unserialize

Таким образом, при переходе к URL-адресу, который вы используете:

$ url = urlencode (serialize ($ array))

и для восстановления переменной используется

$ var = unserialize (urldecode ($ _ GET ['array']))

Однако будьте осторожны. Максимальный размер GET-запроса ограничен 4 КБ, который вы легко можете превысить, передав массивы в URL.

Кроме того, это действительно не самый безопасный способ передачи данных! Вам, вероятно, следует изучить возможность использования сессий.

10
ответ дан 24 November 2019 в 03:37
поделиться

избегайте переменных при выводе ( urlencode ).

и вы не можете просто распечатать массив, вам нужно создать свой URL, используя цикл в некоторых способ

$url = 'http://example.com/index.php?'
$first = true;
foreach($aValues as $key => $value) {
  if(!$first) $url .= '&amp';
  else $first = false;
  $url .= 'aValues['.urlencode($key).']='.urlencode($value);
}
6
ответ дан 24 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: