Existe uma maneira padrão de passar uma matriz através de uma string de consulta?
Para ser claro, eu tenho uma string de consulta com vários valores, um dos quais seria um valor de matriz. Quero que esse valor da string de consulta seja tratado como uma matriz - não quero que a matriz seja explodida para que seja indistinguível das outras variáveis da string de consulta.
Além disso, de acordo com esta resposta da postagem , o autor sugere que o suporte da string de consulta para matrizes não está definido. Isso é preciso?
EDITAR:
Com base na resposta de @ Alex, não há uma maneira padrão de fazer isso, então meu acompanhamento é então o que é uma maneira fácil de reconhecer que o paramater que estou lendo é uma matriz em PHP e Javascript ?
Seria aceitável nomear vários parâmetros como o mesmo nome, e assim eu saberia que eles pertencem a uma matriz? Exemplo:
?myarray=value1&myarray=value2&myarray=value3...
Ou isso seria uma prática ruim?
Respostas:
Aqui está o que eu descobri:
O envio de campos de formulário com vários valores, ou seja, o envio de matrizes através de vars GET / POST, pode ser feito de várias maneiras diferentes, pois um padrão não é necessariamente explicitado.
Três maneiras possíveis de enviar campos ou matrizes com vários valores seriam:
?cars[]=Saab&cars[]=Audi
(Melhor maneira - o PHP lê isso em uma matriz)?cars=Saab&cars=Audi
(Mau modo - o PHP registrará apenas o último valor)?cars=Saab,Audi
(Ainda não tentei isso)Exemplos de formulário
Em um formulário, os campos com valores múltiplos podem assumir a forma de uma caixa de seleção definida como múltipla :
(NOTA: Nesse caso, seria importante nomear o controle select
some_name[]
, para que os vars de solicitação resultantes fossem registrados como uma matriz pelo PHP)... ou como vários campos ocultos com o mesmo nome :
NOTA: O uso
field[]
de vários valores é realmente pouco documentado. Não vejo nenhuma menção a isso na seção sobre chaves com vários valores na string de consulta - Wikipedia ou nos documentos do W3C que lidam com entradas com várias seleções.ATUALIZAR
Como comentaram os comentaristas, isso é muito específico da estrutura. Alguns exemplos:
Cadeia de consulta:
Trilhos:
Angular:
( Discussão angular )
Veja comentários para exemplos em node.js , Wordpress , ASP.net
Manutenção da ordem: Mais uma coisa a considerar é que, se você precisar manter a ordem dos seus itens (ou seja, matriz como uma lista ordenada), realmente terá apenas uma opção: passar uma lista delimitada de valores e convertê-la explicitamente em uma matriz você mesmo.
fonte
?cars=Saab&cars=Audi
formulário?cars=Saab&cars=Audi
e?cars[]=Saab&cars[]=Audi
são transformados em matrizes. No entanto,?cars=Saab
acaba como uma sequência, mas?cars[]=Saab
é uma matriz com um único elemento.?cars[]=Saab&cars[]=Audi
Tem quer haver brakets quadrados ou os colchetes precisa índices /Uma string de consulta carrega dados textuais, portanto não há opção a não ser explodir a matriz, codificá-la corretamente e passá-la em um formato representacional de sua escolha:
p1=value1&pN=valueN...
data=[value1,...,valueN]
data={p1:value1,...,pN:valueN}
e decodifique-o no código do lado do servidor.
fonte
JSON.stringify
eJSON.parse
!json_encode
entãorawurlencode
ejson_decode
na outra página.Eu não acho que exista um padrão.
Cada ambiente da web fornece seu próprio 'padrão' para essas coisas. Além disso, o URL geralmente é muito curto para qualquer coisa (limite de 256 bytes em alguns navegadores). Obviamente, matrizes / dados mais longos podem ser enviados com solicitações POST.
No entanto, existem alguns métodos:
Existe uma maneira PHP, que usa colchetes (
[
,]
) nas consultas de URL. Por exemplo, uma consulta como a?array_name[]=item&array_name[]=item_2
que se diz funcionar, apesar de mal documentada, com o PHP convertendo-a automaticamente em uma matriz. Fonte: https://stackoverflow.com/a/9547490/3787376Os formatos de intercâmbio de dados de objetos (por exemplo, JSON - site oficial , documentação do PHP ) também podem ser usados se eles tiverem métodos de conversão de variáveis de e para strings, como o JSON.
Também é necessário um codificador de URL (disponível para a maioria das linguagens de programação) para solicitações de obtenção HTTP para codificar os dados da string corretamente.
Embora o "método entre colchetes" seja simples e funcione, ele é limitado ao PHP e matrizes.
Se outros tipos de variáveis, como classes ou variáveis de passagem dentro de cadeias de consulta em um idioma diferente do PHP, forem necessários, o método JSON é recomendado.
Exemplo no PHP do método JSON (método 2):
Código para receber a página (PHP):
fonte
Eu acho que seria útil para alguém que está procurando passar a matriz em uma string de consulta para um servlet. Eu testei abaixo da string de consulta e consegui obter os valores da matriz usando req.getgetParameterValues (); método. Abaixo está a string de consulta que passei pelo navegador.
checkbox é minha matriz de parâmetros aqui.
fonte
Isso funciona para mim:
No link, atribuir tem valor:
A rota pode lidar com isso:
Para várias matrizes:
A rota permanece a mesma.
SCREENSHOT
fonte
Você mencionou PHP e Javascript na sua pergunta, mas não nas tags. Cheguei a essa pergunta com a intenção de passar uma matriz para uma ação MVC.Net.
Encontrei a resposta para minha pergunta aqui : o formato esperado é o que você propôs na sua pergunta, com vários parâmetros com o mesmo nome.
fonte
Eu uso React e Rails. Eu fiz:
js
fonte
Você pode usar http_build_query para gerar uma string de consulta codificada em URL a partir de uma matriz no PHP. Embora a string de consulta resultante seja expandida, você pode decidir sobre um separador exclusivo que deseja como parâmetro para o
http_build_query
método. Portanto, quando se trata de decodificação, é possível verificar qual separador foi usado. Se foi o único que você escolheu, essa seria a string de consulta da matriz, caso contrário, seriam as strings de consulta normais.fonte
Embora não haja um padrão na parte da URL, há um padrão para JavaScript. Se você passar objetos contendo matrizes para
URLSearchParams
, e invocátoString()
-lo, ele o transformará em uma lista de itens separados por vírgula:fonte
Verifique a
parse_string
função http://php.net/manual/en/function.parse-str.phpEle retornará todas as variáveis de uma string de consulta, incluindo matrizes.
Exemplo do php.net:
fonte