Ich bin heute auf folgende URL gestoßen:
http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497
Beachten Sie das doppelte Fragezeichen am Anfang der Abfragezeichenfolge:
??blogid=122&entry_id=64497
Mein Browser schien keine Probleme damit zu haben und führte ein schnelles Lesezeichen aus:
javascript:alert(document.location.search);
Ich habe gerade die oben gezeigte Abfragezeichenfolge erhalten.
Ist das eine gültige URL? Der Grund, warum ich so pedantisch bin (vorausgesetzt, ich bin es), ist, dass ich URLs wie diese für Abfrageparameter analysieren muss und die Unterstützung von doppelten Fragezeichen einige Änderungen an meinem Code erfordern würde. Wenn sie in freier Wildbahn sind, muss ich sie natürlich unterstützen. Ich bin hauptsächlich neugierig, ob es meine Schuld ist, dass ich die URL-Standards nicht genau einhalte, oder ob es sich tatsächlich um eine nicht standardmäßige URL handelt.
quelle
indexOf()
das Fragezeichen verwendet, um die Position des ersten Auftretens zu ermitteln. Dann teile ich die query_parameters bei jedem auf&
und dann ihre Name / Wert-Paare bei jedem=
.Antworten:
Ja, es ist gültig. Nur der erste
?
in einer URL hat Bedeutung, nachdem er als wörtliche Fragezeichen behandelt wurde:...
http://tools.ietf.org/html/rfc3986#section-3.4
quelle
?blogid
. Es scheint tatsächlich ein nicht wesentlicher Parameter zu sein, dh die Seite wird mit einer beliebigen Anzahl von Fragezeichen gleich bedient oder der Parameter wird vollständig weggelassen.foo?spam=1?&eggs=3
Gibt dem Parameter als tangential verwandte Antwortspam
den Wert1?
quelle
.htaccess
oder ähnliche Tricks gibt. wenn wir ändernfoo
zuscript.php
und diesen Antrag stellenscript.php?spam=1?&eggs=3
dannvar_dump($_GET)
zeigtarray(2) { ["spam"]=> string(2) "1?" ["eggs"]=> string(1) "3" }