una texto strip_tags remove matriz limpiar hacer ent_quotes ejemplo como 3x3 php arrays query-string querystringparameter

php - texto - ¿Cómo pasar una matriz dentro de una cadena de consulta?



strip_tags wordpress (7)

¿Hay una forma estándar de pasar una matriz a través de una cadena de consulta?

Para ser claros, 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 de modo que no se pueda distinguir de las otras variables de la cadena de consulta.

Además, de acuerdo con esta respuesta posterior , el autor sugiere que el soporte de cadenas de consulta para matrices no está definido. ¿Es esto correcto?

EDITAR:

Según la respuesta de @ Alex, no hay una forma estándar de hacer esto, por lo que mi seguimiento es, entonces, ¿cuál es una manera fácil de reconocer que el parámetro que estoy leyendo es una matriz tanto en PHP como en Javascript ?

¿Sería aceptable nombrar a 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 esto una mala práctica?


Compruebe la función parse_string http://php.net/manual/en/function.parse-str.php

Devolverá todas las variables de una cadena de consulta, incluidas las matrices.

Ejemplo de php.net:

<?php $str = "first=value&arr[]=foo+bar&arr[]=baz"; parse_str($str); echo $first;  // value echo $arr[0]; // foo bar echo $arr[1]; // baz parse_str($str, $output); echo $output[''first''];  // value echo $output[''arr''][0]; // foo bar echo $output[''arr''][1]; // baz ?>


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.

"http://localhost:8080/ServletsTutorials/*.html?myname=abc&initial=xyz&checkbox=a&checkbox=b"

casilla de verificación es mi matriz de parámetros aquí.


Esto es lo que descubrí:

El envío de campos de formulario de múltiples valores, es decir, el envío de matrices a través de las variables GET / POST, se puede realizar de varias maneras diferentes, ya que un estándar no necesariamente se detalla.

Tres formas posibles de enviar campos o arrays de múltiples valores serían:

  • ?cars[]=Saab&cars[]=Audi (Best way- PHP lee esto en una matriz)
  • ?cars=Saab&cars=Audi (Mala forma- PHP solo registrará el último valor)
  • ?cars=Saab,Audi (No he probado esto)

Ejemplos de formularios

En un formulario, los campos de valor múltiple pueden tomar la forma de un cuadro de selección establecido en múltiple :

<form> <select multiple="multiple" name="cars[]"> <option>Volvo</option> <option>Saab</option> <option>Mercedes</option> </select> </form>

(NOTA: En este caso, sería importante nombrar el control de selección some_name[] , para que las vars de solicitud resultantes se registren como una matriz de PHP)

... o como múltiples campos ocultos con el mismo nombre :

<input type="hidden" name="cars[]" value="Volvo"> <input type="hidden" name="cars[]" value="Saab"> <input type="hidden" name="cars[]" value="Mercedes">

NOTA: El uso del field[] para múltiples valores está muy mal documentado. No veo ninguna mención de ello en la sección sobre claves multivalor 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:

?list_a=1&list_a=2&list_a=3&list_b[]=1&list_b[]=2&list_b[]=3&list_c=1,2,3

Rieles:

"list_a": "3", "list_b":[ "1", "2", "3" ], "list_c": "1,2,3"

Angular:

"list_a": [ "1", "2", "3" ], "list_b[]": [ "1", "2", "3" ], "list_c": "1,2,3"

( discussion angular)

Ver comentarios para ejemplos en node.js , Wordpress , ASP.net

Mantener el orden: una cosa más a considerar 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 de valores delimitada y convertirla explícitamente a una matriz a ti mismo.


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 de MVC.Net.

Encontré la respuesta a mi pregunta here : el formato esperado es el que propuso en su pregunta, con múltiples parámetros que tienen el mismo nombre.


No creo que haya una norma.
Cada entorno web proporciona su propio ''estándar'' para tales cosas. Además, la URL es generalmente demasiado corta para cualquier cosa (límite de 256 bytes en algunos navegadores). Por supuesto, los arreglos / datos más largos se pueden enviar con solicitudes POST.

Sin embargo, hay algunos métodos:

  1. Hay una forma de PHP, que utiliza corchetes ( [ , ] ) en las consultas de URL. Por ejemplo, se ha dicho que una consulta como ?array_name[]=item&array_name[]=item_2 funciona, a pesar de estar pobremente documentada, y PHP la convierte automáticamente en una matriz. Fuente: https://.com/a/9547490/3787376

  2. Los 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 de conversión de variables hacia y desde 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 las solicitudes de obtención HTTP codifiquen los datos de cadena correctamente.

Aunque el "método de los corchetes" es simple y funciona, está limitado a PHP y arrays.
Si se requieren otros tipos de variables, como clases o variables de paso dentro de cadenas de consulta en un idioma que no sea PHP, se recomienda el método JSON.

Ejemplo en PHP del método JSON (método 2):

$myarray = array(2, 46, 34, "dfg"); $serialized = json_encode($myarray) $data = ''myarray='' . rawurlencode($serialized); // Send to page via cURL, header() or other service.

Código para recibir la página (PHP):

$myarray = json_decode($_GET["myarray"]); // Or $_POST["myarray"] if a post request.


Puede usar http_build_query para generar una cadena de consulta codificada en URL desde una matriz en PHP. Si bien la cadena de consulta resultante se expandirá, puede http_build_query el separador único que desee como parámetro para el método http_build_query , de modo que cuando se trata de decodificar, puede verificar qué separador se usó. 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.


Una cadena de consulta transporta datos textuales, por lo que no hay otra opción que explotar la matriz, codificarla correctamente y pasarla en un formato representativo de su elección:

p1=value1&pN=valueN...
data=[value1,...,valueN]
data={p1:value1,...,pN:valueN}

y luego decodifíquelo en el código del lado de su servidor.