Est-il valable d'avoir plus d'un point d'interrogation dans l'URL?
j'ai trouvé l'URL suivante aujourd'hui:
http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497
Notez le double point d'interrogation au début de la chaîne de requête:
??blogid=122&entry_id=64497
mon navigateur ne semblait pas avoir de problème avec elle, et l'exécution d'un bookmarklet rapide:
javascript:alert(document.location.search);
vient de me donner la chaîne de requête montrée ci-dessus.
est-ce une URL valide? La raison pour laquelle je suis si pédant (en supposant que je suis) est parce que j'ai besoin pour analyser des URLs comme celle-ci pour les paramètres de requête, et pour supporter des points d'interrogation doublés, il faudrait apporter quelques modifications à mon code. Évidemment s'ils sont dans la nature, je vais avoir besoin de les soutenir; je suis principalement curieux si c'est ma faute de ne pas adhérer aux normes D'URL exactement, ou si c'est en fait une URL non standard.
2 réponses
Oui, il est valide. Seul le premier ?
dans une URL a une signification, n'importe après qu'il soit traité comme des points d'interrogation littérale:
Le composant de requête est indiqué par le premier point d'interrogation ("?") caractère et terminé par un nombre signe ("#") ou par la fin de URI.
...
les caractères slash ( " / " ) et question marque ("?") peuvent représenter des données dans le composant de requête. Méfier que certains anciens, erronée les implémentations peuvent ne pas traiter les données correctement lorsqu'il est utilisé comme URI de base pour les références relatives (Section 5.1), apparemment parce qu'ils ne pas distinguer les données de requête données de chemin lors de la recherche séparateurs hiérarchiques. Cependant, comme composants de requête sont souvent utilisés pour transporter des informations d'identification dans les forme des paires "clé=valeur" et une la valeur fréquemment utilisée est référence pour un autre URI, il est parfois mieux pour une utilisabilité à éviter pourcentage d'encodage de ces caractères.
comme réponse tangentiellement liée, foo?spam=1?&eggs=3
donne le paramètre spam
la valeur 1?