Je suis tombé sur l'URL suivante aujourd'hui:
http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497
Notez le point d'interrogation doublé au début de la chaîne de requête:
??blogid=122&entry_id=64497
Mon navigateur ne semble pas avoir de problème avec cela et exécute un petit bookmarklet:
javascript:alert(document.location.search);
vient de me donner la chaîne de requête ci-dessus.
Est-ce une URL valide? La raison pour laquelle je suis si pédant (en supposant que je le suis) est que je dois analyser des URL comme celle-ci pour les paramètres de requête, et que la prise en charge des points d'interrogation doublés nécessiterait des modifications de mon code. Évidemment, s'ils sont dans la nature, je devrai les soutenir; Je suis principalement curieux de savoir si c'est ma faute pour ne pas adhérer exactement aux normes d'URL, ou s'il s'agit en fait d'une URL non standard.
la source
indexOf()
pour localiser le point d'interrogation, donc il a pris la position de la première occurrence. Ensuite, je divise les query_parameters à chacun&
, puis leurs paires nom / valeur à chacun=
.Réponses:
Oui, c'est valable. Seul le premier
?
d'une URL a une signification, les suivants sont traités comme des points d'interrogation littéraux:...
http://tools.ietf.org/html/rfc3986#section-3.4
la source
?blogid
. Il semble en fait être un paramètre non essentiel, c'est-à-dire que la page est servie de la même manière avec un nombre quelconque de points d'interrogation, ou en omettant complètement le paramètre.En tant que réponse liée tangentiellement,
foo?spam=1?&eggs=3
donne au paramètrespam
la valeur1?
la source
.htaccess
ou des astuces similaires. si nous changeonsfoo
àscript.php
et faire cette demandescript.php?spam=1?&eggs=3
alors desvar_dump($_GET)
spectaclesarray(2) { ["spam"]=> string(2) "1?" ["eggs"]=> string(1) "3" }