¿Hay una forma estándar de pasar una matriz a través de una cadena de consulta?
Para que quede claro, tengo una cadena de consulta con varios valores, uno de los cuales sería un valor de matriz. Quiero que el valor de la cadena de consulta se trate como una matriz: no quiero que la matriz se explote para que no se pueda distinguir de las otras variables de cadena de consulta.
Además, según esta respuesta de la publicación , el autor sugiere que el soporte de cadena de consulta para matrices no está definido. ¿Es esto exacto?
EDITAR:
Según la respuesta de @ Alex, no hay una forma estándar de hacer esto, así que mi seguimiento es, entonces, ¿cuál es una manera fácil de reconocer que el parámetro que estoy leyendo es una matriz en PHP y Javascript ?
¿Sería aceptable nombrar múltiples parámetros con el mismo nombre, y de esa manera sabría que pertenecen a una matriz? Ejemplo:
?myarray=value1&myarray=value2&myarray=value3...
¿O sería una mala práctica?
Respuestas:
Esto es lo que descubrí:
El envío de campos de formulario de valores múltiples, es decir, el envío de matrices a través de variables GET / POST, se puede hacer de varias maneras diferentes, ya que un estándar no necesariamente se detalla.
Las tres formas posibles de enviar campos o matrices de valores múltiples serían:
?cars[]=Saab&cars[]=Audi
(La mejor manera: PHP lee esto en una matriz)?cars=Saab&cars=Audi
(Mala manera: PHP solo registrará el último valor)?cars=Saab,Audi
(No he probado esto)Ejemplos de formularios
En un formulario, los campos de valores múltiples pueden tomar la forma de un cuadro de selección establecido en múltiples :
(NOTA: en este caso, sería importante nombrar el control de selección
some_name[]
, de modo que los vars de solicitud resultantes se registren como una matriz por PHP)... o como múltiples campos ocultos con el mismo nombre :
NOTA: El uso
field[]
para valores múltiples está realmente mal documentado. No veo ninguna mención al respecto en la sección sobre claves de valores múltiples en Cadena de consulta - Wikipedia , o en los documentos del W3C que tratan con entradas de selección múltiple.ACTUALIZAR
Como los comentaristas han señalado, esto es muy específico del marco. Algunos ejemplos:
Cadena de consulta:
Rieles:
Angular:
(Angular Discusión )
Ver comentarios para ejemplos en node.js , Wordpress , ASP.net
Mantenimiento del orden: una cosa más a tener en cuenta es que si necesita mantener el orden de sus elementos (es decir, la matriz como una lista ordenada), realmente solo tiene una opción, que es pasar una lista delimitada de valores y convertirla explícitamente a una matriz tu mismo.
fuente
?cars=Saab&cars=Audi
formulario?cars=Saab&cars=Audi
y?cars[]=Saab&cars[]=Audi
se convierten en matrices. Sin embargo,?cars=Saab
termina como una cadena, pero?cars[]=Saab
es una matriz con un solo elemento.?cars[]=Saab&cars[]=Audi
No hay corchetes o los corchetes necesitan índices /Una cadena de consulta contiene datos textuales, por lo que no hay otra opción que explotar la matriz, codificarla correctamente y pasarla en un formato de representación de su elección:
p1=value1&pN=valueN...
data=[value1,...,valueN]
data={p1:value1,...,pN:valueN}
y luego descifrarlo en el código del lado del servidor.
fuente
JSON.stringify
yJSON.parse
!json_encode
entoncesrawurlencode
yjson_decode
en la otra página.No creo que haya un estándar.
Cada entorno web proporciona su propio 'estándar' para tales cosas. Además, la url suele ser demasiado corta para cualquier cosa (límite de 256 bytes en algunos navegadores). Por supuesto, se pueden enviar matrices / datos más largos con solicitudes POST.
Sin embargo, hay algunos métodos:
Hay una forma PHP, que utiliza corchetes (
[
,]
) en las consultas de URL. Por ejemplo, una consulta como?array_name[]=item&array_name[]=item_2
se dice que funciona, a pesar de estar mal documentada, con PHP convirtiéndola automáticamente en una matriz. Fuente: https://stackoverflow.com/a/9547490/3787376Los formatos de intercambio de datos de objetos (por ejemplo, JSON - sitio web oficial , documentación de PHP ) también se pueden usar si tienen métodos para convertir variables de y hacia cadenas como lo hace JSON.
También se requiere un codificador de URL (disponible para la mayoría de los lenguajes de programación) para que HTTP obtenga solicitudes para codificar los datos de la cadena correctamente.
Aunque el "método de corchetes" es simple y funciona, está limitado a PHP y matrices.
Si se requieren otros tipos de variables, como clases o variables de paso dentro de cadenas de consulta en un lenguaje que no sea PHP, se recomienda el método JSON.
Ejemplo en PHP del método JSON (método 2):
Código para recibir la página (PHP):
fuente
Creo que sería útil para alguien que está buscando pasar la matriz en una cadena de consulta a un servlet. Probé debajo de la cadena de consulta y pude obtener los valores de la matriz usando req.getgetParameterValues (); método. A continuación se muestra la cadena de consulta que pasé a través del navegador.
casilla de verificación es mi matriz de parámetros aquí.
fuente
Esto funciona para mi:
En el enlace, atribuir tiene valor:
La ruta puede manejar esto:
Para múltiples matrices:
La ruta se mantiene igual.
CAPTURA DE PANTALLA
fuente
Menciona PHP y Javascript en su pregunta, pero no en las etiquetas. Llegué a esta pregunta con la intención de pasar una matriz a una acción MVC.Net.
Encontré la respuesta a mi pregunta aquí : el formato esperado es el que propuso en su pregunta, con múltiples parámetros que tienen el mismo nombre.
fuente
Yo uso React and Rails. Yo hice:
js
fuente
Puede usar http_build_query para generar una cadena de consulta codificada en URL a partir de una matriz en PHP. Si bien la cadena de consulta resultante se expandirá, puede elegir un separador único que desee como parámetro del
http_build_query
método, por lo que cuando se trata de decodificar, puede verificar qué separador se utilizó. Si fue el único que eligió, entonces esa sería la cadena de consulta de la matriz, de lo contrario serían las cadenas de consulta normales.fuente
Aunque no hay un estándar en la parte de URL, hay un estándar para JavaScript. Si pasa objetos que contienen matrices
URLSearchParams
y lo llamatoString()
, lo transformará en una lista de elementos separados por comas:fuente
Verifique la
parse_string
función http://php.net/manual/en/function.parse-str.phpDevolverá todas las variables de una cadena de consulta, incluidas las matrices.
Ejemplo de php.net:
fuente