Qual é a melhor maneira de passar uma matriz como um parâmetro de url? Eu estava pensando se isso é possível:
$aValues = array();
$url = 'http://www.example.com?aParam='.$aValues;
ou que tal isto:
$url = 'http://www.example.com?aParam[]='.$aValues;
Eu li exemplos, mas acho confuso:
$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';
$_POST
?query = array('aParam'=> json_encode($arrayOfValues))
. E com isso você pode passar um url melhorurl_encode(implode('/',$query))
. O URL ficará assimwww.example.com/aParam/[va1,val2,...]
. Ao receber, você deve json_decode o valor aParam no array.Respostas:
Há uma solução muito simples:
http_build_query()
. Ele considera seus parâmetros de consulta como uma matriz associativa:retornará
http_build_query()
lida com todos os escapes necessários para você (%5B
=>[
e%5D
=>]
), então esta string é igual aaParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d
.fonte
http_build_query
retornoparam[]
e às vezesparam[index]
. Confira esta postagem: stackoverflow.com/questions/11996573/…Editar: não perca a solução de Stefan acima, que usa a
http_build_query()
função muito útil : https://stackoverflow.com/a/1764199/179125knittl está certo sobre como escapar. No entanto, há uma maneira mais simples de fazer isso:
Se você quiser fazer isso com uma matriz associativa, tente o seguinte:
PHP 5.3+ (função lambda)
PHP <5.3 (retorno de chamada)
fonte
A maneira mais fácil seria usar a
serialize
função.Ele serializa qualquer variável para armazenamento ou transferência. Você pode ler sobre isso no manual do php - serialize
A variável pode ser restaurada usando
unserialize
Portanto, ao passar para o URL que você usa:
$url = urlencode(serialize($array))
e para restaurar a variável que você usa
$var = unserialize(urldecode($_GET['array']))
Porém, tenha cuidado aqui. O tamanho máximo de uma solicitação GET é limitado a 4k, que você pode facilmente exceder passando matrizes em um URL.
Além disso, não é exatamente a maneira mais segura de passar dados! Você provavelmente deve considerar o uso de sessões.
fonte
por favor escape suas variáveis quando outputting (
urlencode
).e você não pode simplesmente imprimir um array, você tem que construir seu url usando um loop de alguma forma
fonte
print $str . "\n";
dá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";}
eprint $strenc . "\n";
dáEntão, se você quiser passar isso
$array
por meio de URL parapage_no_2.php
,ex:-
Para retornar ao array original, ele precisa ser
urldecode()
, entãounserialize()
, assim em page_no_2.php:dá
novamente: D
fonte
Eu faço isso com dados serializados codificados em base64. Melhor e menor maneira, eu acho. urlencode está desperdiçando muito espaço e você tem apenas 4k.
fonte
Esta não é uma resposta direta, pois já foi respondida, mas todo mundo estava falando em enviar os dados, mas ninguém disse realmente o que você faz quando eles chegam lá, e demorei uma boa meia hora para resolver. Então pensei em ajudar aqui.
Vou repetir esta parte
Obviamente, você iria formatar melhor do que este www.someurl.com?x=$query
E para obter os dados de volta
fonte
fonte
na página recebida você pode usar:
parse_str ($ str, $ array); var_dump ($ array);
fonte
Essa é outra maneira de resolver esse problema.
fonte