Gibt es eine Standardmethode zum Übergeben eines Arrays durch eine Abfragezeichenfolge?
Um klar zu sein, habe ich eine Abfragezeichenfolge mit mehreren Werten, von denen einer ein Array-Wert wäre. Ich möchte, dass dieser Abfragezeichenfolgenwert als Array behandelt wird. Ich möchte nicht, dass das Array aufgelöst wird, damit es nicht von den anderen Abfragezeichenfolgenvariablen unterschieden werden kann.
Gemäß dieser Antwort schlägt der Autor vor, dass die Unterstützung von Abfragezeichenfolgen für Arrays nicht definiert ist. Ist das richtig?
BEARBEITEN:
Basierend auf der Antwort von @ Alex gibt es keine Standardmethode, daher ist meine Nachverfolgung eine einfache Methode, um zu erkennen, dass der Parameter, den ich lese, ein Array in PHP und Javascript ist .
Wäre es akzeptabel, mehrere Parameter mit demselben Namen zu benennen, und auf diese Weise würde ich wissen, dass sie zu einem Array gehören? Beispiel:
?myarray=value1&myarray=value2&myarray=value3...
Oder wäre das eine schlechte Praxis?
Antworten:
Folgendes habe ich herausgefunden:
Das Senden von Formularfeldern mit mehreren Werten, dh das Senden von Arrays über GET / POST-Variablen, kann auf verschiedene Arten erfolgen, da ein Standard nicht unbedingt festgelegt ist.
Drei Möglichkeiten, mehrwertige Felder oder Arrays zu senden, sind:
?cars[]=Saab&cars[]=Audi
(Bester Weg - PHP liest dies in ein Array)?cars=Saab&cars=Audi
(Schlechter Weg - PHP registriert nur den letzten Wert)?cars=Saab,Audi
(Habe das nicht versucht)Formularbeispiele
In einem Formular können mehrwertige Felder die Form eines Auswahlfelds haben, das auf mehrere festgelegt ist :
(HINWEIS: In diesem Fall ist es wichtig, das Auswahlsteuerelement zu benennen
some_name[]
, damit die resultierenden Anforderungsvariablen von PHP als Array registriert werden.)... oder als mehrere versteckte Felder mit demselben Namen :
HINWEIS: Die Verwendung
field[]
für mehrere Werte ist wirklich schlecht dokumentiert. Ich sehe keine Erwähnung im Abschnitt über mehrwertige Schlüssel in der Abfragezeichenfolge - Wikipedia oder in den W3C-Dokumenten, die sich mit Mehrfachauswahl-Eingaben befassen.AKTUALISIEREN
Wie Kommentatoren hervorgehoben haben, ist dies sehr rahmenspezifisch. Einige Beispiele:
Abfragezeichenfolge:
Schienen:
Winkel:
(Angular Diskussion )
Beispiele finden Sie in den Kommentaren in node.js , Wordpress , ASP.net
Reihenfolge beibehalten: Eine weitere zu berücksichtigende Sache ist, dass Sie, wenn Sie die Reihenfolge Ihrer Elemente (dh das Array als geordnete Liste) beibehalten müssen , nur eine Option haben, bei der eine begrenzte Werteliste übergeben und explizit in konvertiert wird ein Array selbst.
quelle
?cars=Saab&cars=Audi
Formular?cars=Saab&cars=Audi
und?cars[]=Saab&cars[]=Audi
in Arrays umgewandelt. Jedoch?cars=Saab
endet als String, sondern?cars[]=Saab
ist ein Array mit einem einzelnen Elemente.?cars[]=Saab&cars[]=Audi
Es gibt entweder keine eckigen Klammern oder die eckigen Klammern benötigen Indizes /Eine Abfragezeichenfolge enthält Textdaten, sodass das Array nur aufgelöst, korrekt codiert und in einem Darstellungsformat Ihrer Wahl übergeben werden kann:
p1=value1&pN=valueN...
data=[value1,...,valueN]
data={p1:value1,...,pN:valueN}
und dekodieren Sie es dann in Ihrem serverseitigen Code.
quelle
JSON.stringify
undJSON.parse
!json_encode
dannrawurlencode
undjson_decode
auf der anderen Seite.Ich glaube nicht, dass es einen Standard gibt.
Jede Webumgebung bietet ihren eigenen "Standard" für solche Dinge. Außerdem ist die URL normalerweise zu kurz für irgendetwas (bei einigen Browsern maximal 256 Bytes). Natürlich können längere Arrays / Daten mit POST-Anfragen gesendet werden.
Es gibt jedoch einige Methoden:
Es gibt eine PHP-Methode, bei der in URL-Abfragen eckige Klammern (
[
,]
) verwendet werden. Zum Beispiel?array_name[]=item&array_name[]=item_2
funktioniert eine Abfrage, von der gesagt wurde, dass sie trotz schlechter Dokumentation funktioniert, und PHP konvertiert sie automatisch in ein Array. Quelle: https://stackoverflow.com/a/9547490/3787376Objektdatenaustauschformate (z. B. JSON - offizielle Website , PHP-Dokumentation ) können ebenfalls verwendet werden, wenn sie über Methoden zum Konvertieren von Variablen in und aus Zeichenfolgen verfügen, wie dies bei JSON der Fall ist.
Außerdem ist ein URL-Encoder (für die meisten Programmiersprachen verfügbar) erforderlich, damit HTTP-Abrufanforderungen die Zeichenfolgendaten korrekt codieren können.
Obwohl die "Methode der eckigen Klammern" einfach ist und funktioniert, ist sie auf PHP und Arrays beschränkt.
Wenn andere Variablentypen wie Klassen oder das Übergeben von Variablen in Abfragezeichenfolgen in einer anderen Sprache als PHP erforderlich sind, wird die JSON-Methode empfohlen.
Beispiel in PHP der JSON-Methode (Methode 2):
Code für die Empfangsseite (PHP):
quelle
Ich denke, es wäre hilfreich für jemanden, der das Array in einer Abfragezeichenfolge an ein Servlet übergeben möchte. Ich habe die folgende Abfragezeichenfolge getestet und konnte die Array-Werte mit req.getgetParameterValues () abrufen. Methode. Unten ist die Abfragezeichenfolge, die ich über den Browser übergeben habe.
Das Kontrollkästchen ist hier mein Parameterarray.
quelle
Das funktioniert bei mir:
Im Link hat das Attribut den Wert:
Route kann damit umgehen:
Für mehrere Arrays:
Route bleibt gleich.
BILDSCHIRMFOTO
quelle
Sie erwähnen PHP und Javascript in Ihrer Frage, aber nicht in den Tags. Ich habe diese Frage mit der Absicht erreicht, ein Array an eine MVC.Net-Aktion zu übergeben.
Ich habe hier die Antwort auf meine Frage gefunden : Das erwartete Format ist das, das Sie in Ihrer Frage vorgeschlagen haben, mit mehreren Parametern mit demselben Namen.
quelle
Ich benutze React and Rails. Ich tat:
js
quelle
Sie können http_build_query verwenden , um einen URL-codierten Querystring aus einem Array in PHP zu generieren. Während der resultierende Querystring erweitert wird, können Sie ein eindeutiges Trennzeichen als Parameter für die
http_build_query
Methode auswählen. Wenn Sie also dekodieren, können Sie überprüfen, welches Trennzeichen verwendet wurde. Wenn es das eindeutige wäre, das Sie ausgewählt haben, wäre dies der Array-Querystring, andernfalls der normale Querystring.quelle
Obwohl es im URL-Teil keinen Standard gibt, gibt es einen Standard für JavaScript. Wenn Sie Objekte mit Arrays an übergeben
URLSearchParams
und aufrufentoString()
, wird es in eine durch Kommas getrennte Liste von Elementen umgewandelt:quelle
Überprüfen Sie die
parse_string
Funktion http://php.net/manual/en/function.parse-str.phpEs werden alle Variablen aus einer Abfragezeichenfolge zurückgegeben, einschließlich Arrays.
Beispiel von php.net:
quelle