Как лучше всего передать массив в качестве параметра URL-адреса? Я подумал, возможно ли это:
$aValues = array();
$url = 'http://www.example.com?aParam='.$aValues;
или как насчет этого:
$url = 'http://www.example.com?aParam[]='.$aValues;
Я читал примеры, но мне это не нравится:
$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';
$_POST
?query = array('aParam'=> json_encode($arrayOfValues))
. И вы можете передать более красивый URL-адресurl_encode(implode('/',$query))
. URL будет выглядеть такwww.example.com/aParam/[va1,val2,...]
. При получении вам нужно json_decode значение aParam в массив.Ответы:
Существует очень простое решение:
http_build_query()
. Он принимает параметры вашего запроса в виде ассоциативного массива:вернется
http_build_query()
обрабатывает все необходимые экранирования для вас (%5B
=>[
и%5D
=>]
), поэтому эта строка равнаaParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d
.источник
http_build_query
возвращениемparam[]
и иногдаparam[index]
. Посмотрите этот пост: stackoverflow.com/questions/11996573/…Изменить: не пропустите решение Стефана выше, в котором используется очень удобная
http_build_query()
функция: https://stackoverflow.com/a/1764199/179125Knittl прав в отношении побега. Однако есть более простой способ сделать это:
Если вы хотите сделать это с ассоциативным массивом, попробуйте вместо этого:
PHP 5.3+ (лямбда-функция)
PHP <5.3 (обратный вызов)
источник
Самый простой способ - использовать
serialize
функцию.Он сериализует любую переменную для хранения или передачи. Вы можете прочитать об этом в руководстве по php - сериализация
Переменную можно восстановить, используя
unserialize
Итак, при переходе к URL-адресу, который вы используете:
$url = urlencode(serialize($array))
и восстановить используемую вами переменную
$var = unserialize(urldecode($_GET['array']))
Но будьте осторожны. Максимальный размер GET-запроса ограничен 4 КБ, который можно легко превысить, передав массивы в URL-адресе.
Кроме того, это действительно не самый безопасный способ передачи данных! Вам, вероятно, следует вместо этого изучить использование сессий.
источник
пожалуйста, избегайте ваших переменных при выводе (
urlencode
).и вы не можете просто распечатать массив, вам нужно каким-то образом создать свой URL-адрес, используя цикл
источник
print $str . "\n";
даетa:4:{s:1:"a";s:8:"Thusitha";s:1:"b";s:10:"Sumanadasa";s:1:"c";s:6:"Lakmal";s:1:"d";s:11:"Nanayakkara";}
иprint $strenc . "\n";
даетИтак, если вы хотите передать это
$array
через URL-адресpage_no_2.php
,например: -
Для того, чтобы вернуться обратно в исходный массив, он должен быть
urldecode()
, тоunserialize()
, как это в page_no_2.php:дает
снова: D
источник
Я делаю это с сериализованными данными в кодировке base64. Думаю, лучший и самый маленький способ. urlencode тратит много места, а у вас всего 4 КБ.
источник
Это не прямой ответ, поскольку на него уже был дан ответ, но все говорили об отправке данных, но на самом деле никто не сказал, что вы делаете, когда они попадают туда, и мне потребовалось добрых полчаса, чтобы разобраться с этим. Так что я подумал, что помогу здесь.
Я повторю это
Очевидно, вы бы отформатировали его лучше, чем этот www.someurl.com?x=$query.
И чтобы вернуть данные
источник
источник
на полученной странице вы можете использовать:
parse_str ($ str, $ массив); var_dump ($ массив);
источник
Это еще один способ решения этой проблемы.
источник