¿Cuál es la mejor manera de pasar una matriz como parámetro de URL? Estaba pensando si esto es posible:
$aValues = array();
$url = 'http://www.example.com?aParam='.$aValues;
o que tal esto:
$url = 'http://www.example.com?aParam[]='.$aValues;
He leído ejemplos, pero lo encuentro complicado:
$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';
$_POST
?query = array('aParam'=> json_encode($arrayOfValues))
. Y con la que puedes pasar una URL más agradableurl_encode(implode('/',$query))
. La URL se verá asíwww.example.com/aParam/[va1,val2,...]
. Al recibir, debe json_decode aParam value en una matriz.Respuestas:
Hay una solución muy simple:
http_build_query()
. Toma sus parámetros de consulta como una matriz asociativa:volverá
http_build_query()
maneja todos los escapes necesarios para usted (%5B
=>[
y%5D
=>]
), por lo que esta cadena es igual aaParam[0]=1&aParam[1]=4&aParam[a]=b&aParam[c]=d
.fuente
http_build_query
regresoparam[]
y algunas vecesparam[index]
. Echa un vistazo a esta publicación: stackoverflow.com/questions/11996573/…Editar: no se pierda la solución de Stefan anterior, que utiliza la
http_build_query()
función muy útil : https://stackoverflow.com/a/1764199/179125Knittl tiene razón sobre cómo escapar. Sin embargo, hay una forma más sencilla de hacer esto:
Si desea hacer esto con una matriz asociativa, intente esto en su lugar:
PHP 5.3+ (función lambda)
PHP <5.3 (devolución de llamada)
fuente
La forma más sencilla sería utilizar la
serialize
función.Serializa cualquier variable para su almacenamiento o transferencia. Puede leer sobre esto en el manual de php - serialize
La variable se puede restaurar usando
unserialize
Entonces, al pasar a la URL que usa:
$url = urlencode(serialize($array))
y para restaurar la variable que usa
$var = unserialize(urldecode($_GET['array']))
Sin embargo, ten cuidado aquí. El tamaño máximo de una solicitud GET está limitado a 4k, que puede superar fácilmente al pasar matrices en una URL.
Además, ¡no es la forma más segura de pasar datos! Probablemente debería considerar el uso de sesiones en su lugar.
fuente
por favor escape sus variables al generar (
urlencode
).y no puede simplemente imprimir una matriz, debe construir su URL usando un bucle de alguna manera
fuente
print $str . "\n";
daa: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";}
yprint $strenc . "\n";
daEntonces, si desea pasar esto a
$array
través de una URL apage_no_2.php
,ex:-
Para volver a la matriz original, debe ser
urldecode()
, entoncesunserialize()
, así en page_no_2.php:da
de nuevo: D
fuente
Hago esto con datos serializados codificados en base64. La mejor y más pequeña forma, supongo. urlencode está desperdiciando mucho espacio y solo tienes 4k.
fuente
Esta no es una respuesta directa, ya que esto ya ha sido respondido, pero todos hablaban de enviar los datos, pero nadie dijo realmente lo que haces cuando llegan allí, y me tomó una buena media hora resolverlo. Así que pensé en ayudar aquí.
Voy a repetir esto
Obviamente, lo formatearías mejor que este www.someurl.com?x=$query
Y recuperar los datos
fuente
fuente
en la página recibida puede utilizar:
parse_str ($ str, $ matriz); var_dump ($ matriz);
fuente
Esta es otra forma de solucionar este problema.
fuente