¿Es válido tener más de un signo de interrogación en una URL?

91

Hoy encontré la siguiente URL:

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

Observe el signo de interrogación duplicado al principio de la cadena de consulta:

??blogid=122&entry_id=64497

Mi navegador no parecía tener ningún problema con él y ejecutaba un marcador rápido:

javascript:alert(document.location.search);

me acaba de dar la cadena de consulta que se muestra arriba.

¿Es esta una URL válida? La razón por la que soy tan pedante (suponiendo que lo sea) es porque necesito analizar URL como esta para los parámetros de consulta, y admitir signos de interrogación duplicados requeriría algunos cambios en mi código. Obviamente, si están en la naturaleza, tendré que apoyarlos; Principalmente tengo curiosidad por saber si es culpa mía por no cumplir exactamente con los estándares de URL, o si de hecho es una URL no estándar.

Estropear
fuente
Afortunadamente, a pesar de esto, no necesité cambiar mi código. Estaba usando indexOf()para localizar el signo de interrogación, por lo que tomó la posición de la primera aparición. Luego estoy dividiendo los query_parameters en cada uno &y luego sus pares de nombre / valor en cada uno =.
Bungle

Respuestas:

107

Si, es valido. Solo el primero ? en una URL tiene importancia, cualquiera que se trate después de que se trate como signos de interrogación literal:

El componente de consulta se indica con el primer carácter de signo de interrogación ("?") Y se termina con un carácter de signo de número ("#") o al final del URI.

...

Los caracteres de barra ("/") y signo de interrogación ("?") Pueden representar datos dentro del componente de consulta. Tenga en cuenta que algunas implementaciones antiguas y erróneas pueden no manejar estos datos correctamente cuando se utilizan como URI base para referencias relativas (Sección 5.1), aparentemente porque no distinguen los datos de consulta de los datos de ruta cuando buscan separadores jerárquicos. Sin embargo, como los componentes de la consulta se utilizan a menudo para llevar información de identificación en forma de pares "clave = valor" y un valor utilizado con frecuencia es una referencia a otro URI, a veces es mejor para la usabilidad evitar la codificación porcentual de esos caracteres.

http://tools.ietf.org/html/rfc3986#section-3.4

Ámbar
fuente
9
Entonces, ¿eso significa que el primer parámetro de consulta se llama "? Blogid" y no "blogid"? Eso podría ser divertido ...
GalacticCowboy
3
@GalacticCowboy - Sí, se me acaba de ocurrir lo mismo. Tienes razón: Firebug confirma que el primer parámetro de consulta es de hecho ?blogid. En realidad, parece ser un parámetro no esencial, es decir, la página se muestra igual con cualquier número de signos de interrogación u omitiendo el parámetro por completo.
Bungle
26

Como respuesta relacionada tangencialmente, foo?spam=1?&eggs=3le da al parámetro spamel valor1?

Hilton Shumway
fuente
si. en caso de que no haya .htaccesstrucos o similares. si cambiamos fooa script.phpy hacer esta solicitud script.php?spam=1?&eggs=3a continuación var_dump($_GET)espectáculosarray(2) { ["spam"]=> string(2) "1?" ["eggs"]=> string(1) "3" }
Hebe