Ist eine URL wie http://example.com/foo?bar
gültig?
Ich suche nach einem Link zu etwas Offiziellem, das so oder so sagt. Eine einfache Ja / Nein-Antwort oder anekdotische Beweise werden es nicht ändern.
Ist eine URL wie http://example.com/foo?bar
gültig?
Ich suche nach einem Link zu etwas Offiziellem, das so oder so sagt. Eine einfache Ja / Nein-Antwort oder anekdotische Beweise werden es nicht ändern.
Antworten:
Der URI-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 URI-Schemas und der Benennungsberechtigung (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 übermitteltes Formular die Formularwerte als Name-Wert-Paare im Formular "? Key1 = value1 & key2 = value2 ..." (ordnungsgemäß codiert) codieren soll. Das Parsen der Abfragezeichenfolge hängt vom serverseitigen Code ab (z. B. Java-Servlet-Engine).
Sie identifizieren nicht, welches serverseitige Framework Sie gegebenenfalls verwenden, aber es ist möglich, dass Ihr serverseitiges Framework davon ausgeht, dass die Abfragezeichenfolge immer in Name-Wert-Paaren vorliegt und eine Abfragezeichenfolge erstickt, die dies nicht 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 damit umgegangen wird.
Sie sind vollkommen gültig. Sie könnten sie als das Äquivalent des großen muskulösen Mannes betrachten, der still 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. In diesem Abschnitt werden die schemaspezifische Syntax und Semantik für http-URLs definiert." http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
Also ja, nach einem Fragezeichen ist alles gültig. Ihr Server interpretiert möglicherweise anders, aber anekdotisch können Sie sehen, dass einige Sprachen dies als einen booleschen Wert behandeln, der wahr ist, wenn er aufgelistet ist.
Der einzig relevante Teil der URI-Spezifikation besteht darin, alles zwischen dem ersten ?
und dem ersten zu wissen, was#
der Definition einer Abfrage durch die Spezifikation entspricht. Es kann beliebige Zeichen wie enthalten [:/.?]
. Dies bedeutet, dass eine Abfragezeichenfolge wie ?bar
oder ?ten+green+apples
gültig ist.
isindex
ist nicht sinnvoll HTML5.
Es wird nur zur Verwendung als erstes Element in einem Formular als veraltet bereitgestellt und ohne Namen übermittelt.
Wenn der Name des Eintrags "isindex" lautet, sein Typ "text" ist und dies der erste Eintrag im Formulardatensatz ist, hängen Sie den Wert an das Ergebnis an und überspringen Sie den Rest der Unterschritte für diesen Eintrag und fahren Sie mit dem nächsten fort ggf. Eintrag oder sonst der nächste Schritt im Gesamtalgorithmus.
Das isindex-Flag ist nur für ältere Zwecke bestimmt. Formulare in konformen HTML-Dokumenten generieren keine Nutzdaten, die mit diesem Flag dekodiert werden müssen.
Das letzte Mal, dass isindex unterstützt wurde, war HTML3 . Die Verwendung in HTML5 dient dazu, 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 zu vereinfachen isindex
.
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 besondere Unterstützung)Als weiteres weitaus häufigeres Beispiel wird node.js
der normale Weg gewählt und das Parsen erleichtert
parseQueryString
)Die meisten anderen URI-Parsing-APIs folgen einer ähnlichen Vorgehensweise.
parse_url
folgt als ähnliche Implementierung, gibt jedoch nur die Zeichenfolge für die Abfrage zurück. Das Parsen in ein Objekt von k=>v
erfordertparse_string()
Es ist gültig: siehe Wikipedia , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Syntaxkomponenten) .
isindex
veraltete Magie name
aus HTML5
Diese veraltete Funktion ermöglicht es einer Formularübermittlung, eine solche URL zu generieren, was einen weiteren Beweis dafür liefert, 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 wie unter: https://stackoverflow.com/a/41689431/895245 erwähnt veraltet
Wie alle anderen Antworten beschrieben, ist es perfekt für die Überprüfung gültig, insbesondere für boolesche Dinge
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 Folgendes tun:
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
das exampleQueryString
wird , false
wenn die Funktion nicht den Query - String finden kann, wird anders sein true
.