111 votes

Est-il possible d'avoir plus d'un point d'interrogation dans une URL ?

Je suis tombé aujourd'hui sur l'URL suivante :

http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497

Remarquez le point d'interrogation doublé au début de la chaîne de requête :

??blogid=122&entry_id=64497

Mon navigateur n'a pas semblé avoir de problème avec cela, et j'ai lancé un bookmarklet rapide :

javascript:alert(document.location.search);

m'a donné la chaîne de requête ci-dessus.

S'agit-il d'une URL valide ? La raison pour laquelle je suis si pédant (en supposant que je le sois) est que j'ai besoin d'analyser des URLs comme celle-ci pour les paramètres de requête, et la prise en charge des points d'interrogation doublés nécessiterait quelques changements dans mon code. Je suis surtout curieux de savoir si c'est de ma faute parce que je ne respecte pas exactement les normes d'URL, ou s'il s'agit en fait d'une URL non standard.

129voto

Amber Points 159296

Oui, c'est valable. Seule la premier ? dans un URL a une signification, tous ceux qui le suivent sont traités comme des points d'interrogation littéraux :

L'élément d'interrogation est indiqué par le premier point d'interrogation (" ?") et se termine par un signe numérique ("#") ou par la fin de l'URI. l'URI.

...

Les caractères barre oblique ("/") et point d'interrogation (" ?") peuvent représenter des données. point d'interrogation (" ?") peuvent représenter des données dans le composant d'interrogation. Attention que certains anciens peuvent ne pas gérer correctement ces données lorsqu'elles sont utilisées comme élément de requête. lorsqu'elles sont utilisées comme URI de base pour les références relatives (section 5.1), apparemment parce qu'elles ne distinguent pas les données de requête des lorsqu'elles recherchent des séparateurs hiérarchiques. Cependant, comme les les composants d'interrogation sont souvent utilisés pour d'identification sous la forme de paires "clé sous la forme de paires "clé=valeur" et qu'une valeur valeur fréquemment utilisée est une référence à un autre URI, il est parfois préférable pour la facilité d'utilisation d'éviter d'éviter le codage en pourcentage de ces caractères.

https://www.rfc-editor.org/rfc/rfc3986#section-3.4

32voto

Hilton Shumway Points 76

En guise de réponse tangentiellement liée, foo?spam=1?&eggs=3 donne le paramètre spam la valeur 1?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X