webentwicklung-frage-antwort-db.com.de

Ist ein URL-Abfrageparameter gültig, wenn er keinen Wert hat?

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.

120
Conley Owens
  • Gültig für den URI-RFC
  • Für Ihr serverseitiges Framework/Ihren serverseitigen Code wahrscheinlich akzeptabel

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.

90
Bert F

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.

69
Marc B

"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.

8
Jeff Ferland

Ja, das ist gültig.

Wenn man nur überprüfen will, ob der Parameter existiert oder nicht, ist dies eine Möglichkeit.

6
Oded

URI Spec

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

HTML-Spezifikation

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.

Unterstützung in Bibliotheken

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.

Perl RI.pm (spezielle Unterstützung)

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.

Node.js url (keine spezielle Unterstützung)

Als weiteres weitaus häufigeres Beispiel nimmt node.js Den normalen Weg und vereinfacht das Parsen

  • Ein Faden
  • oder ein Objekt mit Schlüsseln und Werten (mit parseQueryString)

Die meisten anderen URI-Parsing-APIs folgen etwas ähnlichem.

4
Evan Carroll
3
thirtydot

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.

1
M98