La especificación de sintaxis URI es para URI genéricos. Permite cualquier cosa en el query. No conozco ninguna especificación que realmente especifique los pares clave = valor separados por ampersand. Yo creo que es meramente convencional. Sé que PHP, por ejemplo, ofrece una opción para usar un separador diferente. Pero ahora, todos usan cosas separadas por ampersand cuando quieren pares clave-valor. De vez en cuando, se encuentra con elementos que lo usan solo para una cadena simple, p. http://example.com/?example. Esto es perfectamente válido.
La respuesta básica, sin embargo, es que &
es válido en cualquier lugar de la cadena de consulta, incluso al final.
Demistifying la sintaxis RFC, o Por qué &
es válida en cualquier parte de la cadena de consulta:
En primer lugar, se han
query = *(pchar/"/"/"?")
(Así que una cadena de consulta está hecho de cualquier número de pchar
y barras y signos de interrogación literales.)
Volviendo, tiene
pchar = unreserved/pct-encoded/sub-delims/":"/"@"
Y antes aún
sub-delims = "!"/"$"/"&"/"'"/"("/")"
/"*"/"+"/","/";"/"="
Así que un literal &
está en sub-delims
que está en pchar
, por lo que es válido en query
Vale la pena señalar [sección 1.3] (http://tools.ietf.org/html/rfc3986#section-1.3) de esa especificación que reenvía a los usuarios a [rfc2234] (http://tools.ietf.org/html/rfc2234) donde se formaliza ABNF. Sí, la gramática tarda un poco en acostumbrarse, pero no es tan grave una vez que comprenda dónde están las referencias. – aaaaaa