Ist eine URL wie http://example.com/foo?bar
gültig?
Ich suche nach einem Link zu etwas Offiziellem, das so oder so aussagt. Eine einfache Ja/Nein-Antwort oder ein anekdotischer Beweis reichen nicht aus.
Der RI RFC schreibt kein Format für die Abfragezeichenfolge vor. Obwohl erkannt wird, dass die Abfragezeichenfolge häufig Name-Wert-Paare enthält, ist dies nicht erforderlich (z. B. enthält sie häufig einen anderen URI).
3.4. Abfrage
Die Abfragekomponente enthält nicht hierarchische Daten, die zusammen mit den Daten in der Pfadkomponente (Abschnitt 3.3) dazu dienen, eine Ressource im Rahmen des Schemas und der Benennungsberechtigung des URI (falls vorhanden) zu identifizieren. ...
... Da Abfragekomponenten jedoch häufig verwendet werden, um identifizierende Informationen in Form von "Schlüssel = Wert" -Paaren zu übertragen, und ein häufig verwendeter Wert eine Referenz auf einen anderen URI ist, ...
HTML legt fest, dass ein über HTTP GET gesendetes Formular die Formularwerte als Name-Wert-Paare in der Form "? key1 = value1 & key2 = value2 ..." codieren soll. (richtig codiert). Das Parsen der Abfragezeichenfolge hängt vom serverseitigen Code ab (z. B. Java Servlet-Engine)).
Sie wissen nicht, welches serverseitige Framework Sie verwenden, wenn überhaupt, aber es ist möglich, dass Ihr serverseitiges Framework davon ausgeht, dass die Abfragezeichenfolge immer in Name-Wert-Paaren vorliegt und eine Abfragezeichenfolge unterdrückt, die nicht vorhanden ist in diesem Format (zB ?bar
). Wenn es sich um Ihren eigenen benutzerdefinierten Code handelt, der die Abfragezeichenfolge analysiert, müssen Sie lediglich sicherstellen, dass Sie dieses Abfragezeichenfolgenformat verarbeiten. Wenn es sich um ein Framework handelt, müssen Sie Ihre Dokumentation konsultieren oder einfach testen, um zu sehen, wie es gehandhabt wird.
Sie sind vollkommen gültig. Man könnte sie als das Äquivalent des muskulösen Mannes betrachten, der schweigend hinter dem Mob-Boten steht. Der Typ hat keinen Namen und spricht nicht, aber seine bloße Anwesenheit vermittelt Informationen.
"Das" http "-Schema wird verwendet, um Netzwerkressourcen über das HTTP-Protokoll zu lokalisieren. Dieser Abschnitt definiert die schemaspezifische Syntax und Semantik für http-URLs." http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" Host [ ":" port ] [ abs_path [ "?" query ]]
Also ja, alles ist nach einem Fragezeichen gültig. Ihr Server kann unterschiedlich interpretieren, aber anekdotisch können Sie sehen, dass einige Sprachen dies als einen booleschen Wert behandeln, der wahr ist, wenn er aufgelistet wird.
Ja, das ist gültig.
Wenn man nur überprüfen will, ob der Parameter existiert oder nicht, ist dies eine Möglichkeit.
Der einzige relevante Teil der URI-Spezifikation besteht darin, alles zwischen dem ersten ?
Und dem ersten #
Zu wissen, das zur Definition einer Abfrage in der Spezifikation passt. Es kann beliebige Zeichen wie [:/.?]
Enthalten. Dies bedeutet, dass eine Abfragezeichenfolge wie ?bar
Oder ?ten+green+apples
Gültig ist.
Finden Sie das RFC 3986 hier
isindex
ist nicht sinnvoll HTML5.
Es wird bereitgestellt , veraltet , um nur als erstes Element in einem Formular verwendet zu werden, und wird ohne Namen übermittelt.
Wenn der Name des Eintrags "isindex" lautet, der Typ "text" ist und dies der erste Eintrag im Formulardatensatz ist, hängen Sie den Wert an das Ergebnis an und überspringen Sie die restlichen Unterschritte für diesen Eintrag und fahren Sie mit dem nächsten fort Eintrag, falls vorhanden, oder sonst der nächste Schritt im Gesamtalgorithmus.
Das Flag isindex ist nur für ältere Zwecke vorgesehen. Formulare in konformen HTML-Dokumenten erzeugen keine Nutzdaten, die mit diesem Flag decodiert werden müssen.
Das letzte Mal isindex wurde von HTML3 unterstützt . Es wird in HTML5 verwendet, um die Abwärtskompatibilität zu vereinfachen.
Die Unterstützung in Bibliotheken für dieses URI-Format ist unterschiedlich. Einige Bibliotheken bieten jedoch Legacy-Unterstützung, um die Verwendung von isindex
zu vereinfachen.
Einige Bibliotheken wie Perls URI bieten Methoden zum Parsen dieser Art von Strukturen
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
url
(keine spezielle Unterstützung)Als weiteres weitaus häufigeres Beispiel nimmt node.js
Den normalen Weg und vereinfacht das Parsen
parseQueryString
)Die meisten anderen URI-Parsing-APIs folgen etwas ähnlichem.
parse_url
folgt einer ähnlichen Implementierung, gibt jedoch nur den String für die Abfrage zurück. Das Parsen in ein Objekt von k=>v
Erfordert parse_string()
Es ist gültig: siehe Wikipedia , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Syntax Components) .
isindex
veraltete Magie name
von HTML5
Mit dieser veralteten Funktion kann ein Formular, das gesendet wird, eine solche URL generieren. Dies ist ein weiterer Beweis dafür, dass sie für HTML gültig ist. Z.B.:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
generiert eine URL vom Typ:
?bar
Standard: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
wird jedoch nicht mehr empfohlen, wie unter folgender Adresse angegeben: https://stackoverflow.com/a/41689431/895245
Wie alle anderen Antworten beschrieben, ist es perfekt für Überprüfungen, insbesondere für boolesche Sachen
Hier ist eine einfache Funktion, um die Abfragezeichenfolge nach Namen abzurufen:
function getParameterByName(name, url) {
if (!url) {
url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
wenn Sie nun überprüfen möchten, ob die gesuchte Abfragezeichenfolge vorhanden ist oder nicht, können Sie eine einfache Aktion ausführen:
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
das exampleQueryString
ist false
, wenn die Funktion die Abfragezeichenfolge nicht finden kann, andernfalls true
.