http - mayer - ¿Los dos puntos requieren codificación en los parámetros de consulta de URI?
url encode php (2)
Sí, deberían estar codificados en una cadena de consulta. La codificación correcta es %3A
Sin embargo, puedo entender por qué UriBuilder no está codificando :
No desea codificar los dos puntos después del protocolo (por ejemplo, http:
o entre el nombre de usuario y la contraseña (por ejemplo, ftp://username:[email protected]
) en un URI absoluto.
Me di cuenta de que el UriBuilder
de Java no codifica los caracteres incluidos en mis valores de parámetros de consulta (cadenas con formato ISO 8601).
Según Wikipedia, parece que el colon debería estar codificado.
En particular, la codificación de la cadena de consulta utiliza las siguientes reglas:
- Las letras (AZ y az), los números (0-9) y los caracteres ''.'', ''-'', ''~'' y ''_'' se dejan tal cual
- SPACE está codificado como ''+'' o% 20 [cita requerida]
- Todos los demás caracteres están codificados como% hexadecimal FF con cualquier carácter no ASCII primero codificado como UTF-8 (u otra codificación especificada)
Entonces, ¿cuál es el problema? ¿Deberían codificarse o no los dos puntos en los parámetros de consulta?
Actualizar:
Busqué la especificación de sintaxis de URI ( RFC 3986 ) y parece que la codificación de dos puntos en los parámetros de consulta realmente no es necesaria. Aquí hay un extracto del ABNF para URI:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "''" / "(" / ")" / "*" / "+" / "," / ";" / "=
No hay UriBuilder
en Java SDK, está definido por JAX-RS. Su documentación indica que los parámetros de consulta deben tener codificación URL, otros componentes están codificados usando RFC 3986.
Los métodos de compilación realizan codificación contextual de caracteres no permitidos en el componente URI correspondiente siguiendo las reglas del tipo de
application/x-www-form-urlencoded
para parámetros de consulta y RFC 3986 para todos los demás componentes
Sin embargo, la implementación de Jersey de JAX-RS no cumple con esta especificación, y codifica todo de acuerdo con RFC 3986. Es un error, consulte el boleto de JIRA .