Saltar al contenido

Codificación de URL Java de parámetros de cadena de consulta

Solución:

URLEncoder es el camino a seguir. Solo debes tener en cuenta para codificar solamente el nombre y / o valor del parámetro de la cadena de consulta individual, no la URL completa, seguro que no el carácter separador del parámetro de la cadena de consulta & ni el carácter separador de nombre-valor del parámetro =.

String q = "random word £500 bank $";
String url = "https://example.com?q=" + URLEncoder.encode(q, StandardCharsets.UTF_8);

Cuando todavía no esté en Java 10 o más reciente, utilice StandardCharsets.UTF_8.toString() como argumento de juego de caracteres, o cuando todavía no está en Java 7 o más reciente, utilice "UTF-8".


Tenga en cuenta que los espacios en los parámetros de consulta están representados por +, no %20, que es legítimamente válido. los %20 generalmente se usa para representar espacios en el propio URI (la parte antes del carácter separador de cadena de consulta de URI ?), no en la cadena de consulta (la parte posterior ?).

También tenga en cuenta que hay tres encode() métodos. Uno sin Charset como segundo argumento y otro con String como segundo argumento que arroja una excepción comprobada. El que no tiene Charset El argumento está en desuso. Nunca lo use y siempre especifique el Charset argumento. El javadoc incluso recomienda explícitamente usar la codificación UTF-8, como lo exigen RFC3986 y W3C.

Todos los demás caracteres no son seguros y primero se convierten en uno o más bytes utilizando algún esquema de codificación. Luego, cada byte está representado por la cadena de 3 caracteres “% xy”, donde xy es la representación hexadecimal de dos dígitos del byte. El esquema de codificación recomendado para usar es UTF-8. Sin embargo, por razones de compatibilidad, si no se especifica una codificación, se utiliza la codificación predeterminada de la plataforma.

Ver también:

  • Lo que todo desarrollador web debe saber sobre la codificación de URL

Yo no usaria URLEncoder. Además de tener un nombre incorrecto (URLEncoder no tiene nada que ver con las URL), ineficaz (utiliza un StringBuffer en lugar de Builder y hace un par de otras cosas que son lentas) También es demasiado fácil arruinarlo.

En su lugar, usaría URIBuilder o de primavera org.springframework.web.util.UriUtils.encodeQuery o Commons Apache HttpClient. La razón es que debe escapar del nombre de los parámetros de consulta (es decir, la respuesta de BalusC q) de forma diferente al valor del parámetro.

El único inconveniente de lo anterior (que descubrí dolorosamente) es que las URL no son un verdadero subconjunto de las URI.

Código de muestra:

import org.apache.http.client.utils.URIBuilder;

URIBuilder ub = new URIBuilder("http://example.com/query");
ub.addParameter("q", "random word £500 bank $");
String url = ub.toString();

// Result: http://example.com/query?q=random+word+%C2%A3500+bank+%24

Como solo estoy enlazando a otras respuestas, lo marqué como un wiki de la comunidad. Siéntete libre de editar.

Primero debe crear un URI como:

String urlStr = "http://www.example.com/CEREC® Materials & Accessories/IPS Empress® CAD.pdf"
URL url= new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());

Luego convierta esa cadena Uri a ASCII:

urlStr=uri.toASCIIString();

Ahora su cadena de URL está completamente codificada, primero hicimos una codificación de URL simple y luego la convertimos a Cadena ASCII para asegurarnos de que no quede ningún carácter fuera de US-ASCII en la cadena. Así es exactamente como lo hacen los navegadores.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *