2010-05-27 16 views
68

me encontré con el siguiente URL hoy:¿Es válido tener más de un signo de interrogación en una URL?

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

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

??blogid=122&entry_id=64497 

Mi navegador no parecen tener ningún problema con él, y ejecutando un bookmarklet 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 estoy siendo tan pedante (suponiendo que lo sea) es porque necesito analizar URL como esta para los parámetros de consulta, y el apoyo a los signos de interrogación duplicados requeriría algunos cambios en mi código. Obviamente, si están en la naturaleza, tendré que apoyarlos; Tengo curiosidad sobre todo si es mi culpa por no cumplir con los estándares de URL exactamente, o si de hecho es una URL no estándar.

+0

Afortunadamente, a pesar de esto yo no necesito cambiar mi código. Estaba usando 'indexOf()' para ubicar el signo de interrogación, por lo que recogió la posición de la primera aparición. Luego estoy dividiendo los parámetros query_parameters en cada '&' y luego sus pares nombre/valor en cada '='. – Bungle

Respuesta

81

Sí, es válido. Sólo el primera? en un sitio de Internet ha significado, cualquier después de que se tratan como signos de interrogación literales:

El componente de consulta se indica mediante la marca primera pregunta ("?") carácter y terminada por una número carácter de signo ("#") o al final de el URI.

...

Los caracteres de barra ("/") y signo de interrogación ("?") Pueden representar datos dentro del componente de consulta. Cuidado con que algunos mayores, erróneas implementaciones pueden no manejar dichos datos correctamente cuando se utiliza como el URI base de referencias relativas (Sección 5.1), al parecer porque no distinguen datos de consulta de datos de trayectoria en la búsqueda de separadores jerárquicos. Sin embargo, como componentes de consulta se utilizan a menudo para carry información de identificación en la forma de "clave = valor" pares y uno valor utilizado frecuentemente es una referencia a otro URI, a veces es mejor para la facilidad de uso para evitar ciento -codificando esos personajes.

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

+7

¿Significa eso que el primer parámetro de consulta se llama "? Blogid" y no "blogid"? Eso podría ser divertido ... – GalacticCowboy

+0

Interesante, gracias Amber - ¡gran respuesta! – Bungle

+2

@GalacticCowboy - Sí, lo mismo se me acaba de ocurrir.Estás en lo correcto: 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 recibe el mismo número de signos de interrogación, u omite por completo el parámetro. – Bungle

15

Como respuesta relacionada tangencialmente, foo?spam=1?&eggs=3 da el parámetro spam el valor 1?

Cuestiones relacionadas