Existe-t-il un moyen standard de passer un tableau via une chaîne de requête?
Pour être clair, j'ai une chaîne de requête avec plusieurs valeurs, dont l'une serait une valeur de tableau. Je veux que cette valeur de chaîne de requête soit traitée comme un tableau - je ne veux pas que le tableau soit éclaté de sorte qu'il soit impossible de le distinguer des autres variables de chaîne de requête.
En outre, selon cette réponse , l'auteur suggère que la prise en charge des chaînes de requête pour les tableaux n'est pas définie. Est-ce exact?
ÉDITER:
Sur la base de la réponse de @ Alex, il n'y a pas de moyen standard de le faire, donc mon suivi est alors quel est un moyen facile de reconnaître que le paramètre que je lis est un tableau à la fois en PHP et en Javascript ?
Serait-il acceptable de nommer plusieurs paramètres du même nom, et de cette façon je saurais qu'ils appartiennent à un tableau? Exemple:
?myarray=value1&myarray=value2&myarray=value3...
Ou serait-ce une mauvaise pratique?
Réponses:
Voici ce que j'ai compris:
La soumission de champs de formulaire à valeurs multiples, c'est-à-dire la soumission de tableaux via des variables GET / POST, peut être effectuée de différentes manières, car une norme n'est pas nécessairement expliquée.
Trois façons possibles d'envoyer des champs ou des tableaux à valeurs multiples seraient:
?cars[]=Saab&cars[]=Audi
(Meilleur moyen - PHP lit ceci dans un tableau)?cars=Saab&cars=Audi
(Mauvaise façon - PHP n'enregistrera que la dernière valeur)?cars=Saab,Audi
(Je n'ai pas essayé ça)Exemples de formulaires
Sur un formulaire, les champs à valeurs multiples peuvent prendre la forme d'une boîte de sélection définie sur plusieurs :
(REMARQUE: dans ce cas, il serait important de nommer le contrôle de sélection
some_name[]
, afin que les variables de requête résultantes soient enregistrées en tant que tableau par PHP)... ou comme plusieurs champs cachés du même nom :
REMARQUE: l' utilisation
field[]
de plusieurs valeurs est vraiment mal documentée. Je n'en vois aucune mention dans la section sur les clés à valeurs multiples dans la chaîne de requête - Wikipedia , ou dans les documents du W3C traitant des entrées à sélection multiple.MISE À JOUR
Comme l'ont souligné les commentateurs, cela est très spécifique au cadre. Quelques exemples:
Chaîne de requête:
Rails:
Angulaire:
( Discussion angulaire )
Voir les commentaires pour des exemples dans node.js , Wordpress , ASP.net
Maintenir l'ordre: Une autre chose à considérer est que si vous avez besoin de maintenir l' ordre de vos éléments (c'est-à-dire un tableau en tant que liste ordonnée), vous n'avez vraiment qu'une seule option, qui est de passer une liste de valeurs délimitée et de la convertir explicitement en un tableau vous-même.
la source
?cars=Saab&cars=Audi
formulaire?cars=Saab&cars=Audi
et?cars[]=Saab&cars[]=Audi
se transforment en tableaux. Cependant,?cars=Saab
se termine par une chaîne, mais?cars[]=Saab
est un tableau avec un seul élément.?cars[]=Saab&cars[]=Audi
Il n'y a pas de crochets ou les crochets ont besoin d'index /Une chaîne de requête contient des données textuelles, il n'y a donc pas d'autre choix que d'exploser le tableau, de le coder correctement et de le passer dans un format de représentation de votre choix:
p1=value1&pN=valueN...
data=[value1,...,valueN]
data={p1:value1,...,pN:valueN}
puis le décoder dans votre code côté serveur.
la source
JSON.stringify
etJSON.parse
!json_encode
puisrawurlencode
etjson_decode
sur l'autre page.Je ne pense pas qu'il existe une norme.
Chaque environnement Web fournit sa propre «norme» pour de telles choses. En outre, l'URL est généralement trop courte pour quoi que ce soit (limite de 256 octets sur certains navigateurs). Bien sûr, des tableaux / données plus longs peuvent être envoyés avec des requêtes POST.
Cependant, il existe quelques méthodes:
Il existe une méthode PHP, qui utilise des crochets (
[
,]
) dans les requêtes URL. Par exemple, une requête telle que celle-ci?array_name[]=item&array_name[]=item_2
a fonctionné, bien qu'elle soit mal documentée, avec PHP la convertissant automatiquement en tableau. Source: https://stackoverflow.com/a/9547490/3787376Les formats d'échange de données d'objets (par exemple JSON - site officiel , documentation PHP ) peuvent également être utilisés s'ils ont des méthodes de conversion de variables vers et depuis des chaînes comme le fait JSON.
Un encodeur url (disponible pour la plupart des langages de programmation) est également requis pour les requêtes get HTTP afin d'encoder correctement les données de chaîne.
Bien que la "méthode des crochets" soit simple et fonctionne, elle est limitée à PHP et aux tableaux.
Si d'autres types de variables tels que des classes ou des variables de passage dans des chaînes de requête dans un langage autre que PHP sont requis, la méthode JSON est recommandée.
Exemple en PHP de la méthode JSON (méthode 2):
Code de réception de page (PHP):
la source
Je pense que ce serait utile pour quelqu'un qui cherche à passer le tableau dans une chaîne de requête à un servlet. J'ai testé la chaîne de requête ci-dessous et j'ai pu obtenir les valeurs du tableau à l'aide de req.getgetParameterValues (); méthode. Vous trouverez ci-dessous la chaîne de requête que j'ai passée via le navigateur.
la case à cocher est mon tableau de paramètres ici.
la source
Cela fonctionne pour moi:
En lien, attribuer a une valeur:
Route peut gérer cela:
Pour plusieurs tableaux:
La route reste la même.
CAPTURE D'ÉCRAN
la source
Vous mentionnez PHP et Javascript dans votre question, mais pas dans les balises. J'ai atteint cette question avec l'intention de passer un tableau à une action MVC.Net.
J'ai trouvé la réponse à ma question ici : le format attendu est celui que vous avez proposé dans votre question, avec plusieurs paramètres portant le même nom.
la source
J'utilise React et Rails. J'ai fait:
js
la source
Vous pouvez utiliser http_build_query pour générer une chaîne de requête codée URL à partir d'un tableau en PHP. Alors que la chaîne de requête résultante sera développée, vous pouvez décider du séparateur unique que vous souhaitez comme paramètre de la
http_build_query
méthode, donc en ce qui concerne le décodage, vous pouvez vérifier quel séparateur a été utilisé. Si c'était l'unique que vous avez choisi, ce serait la chaîne de requête de tableau, sinon ce serait la chaîne de requête normale.la source
Bien qu'il n'y ait pas de norme pour la partie URL, il existe une norme pour JavaScript. Si vous passez des objets contenant des tableaux à
URLSearchParams
, et appelez-toString()
le, il le transformera en une liste d'éléments séparés par des virgules:la source
Vérifiez la
parse_string
fonction http://php.net/manual/en/function.parse-str.phpIl renverra toutes les variables d'une chaîne de requête, y compris les tableaux.
Exemple de php.net:
la source