Pregunta

Tengo un código Java que usa Jakarta HttpClient como este:

URI aURI = new URI( "http://host/index.php?title=" + title + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery());

El problema es que si title incluye cualquier signo comercial (&), se consideran delimitadores de parámetros y la solicitud se vuelve loca...y si los reemplazo con el equivalente con escape de URL %26, entonces esto obtiene un doble escape mediante getEscapedPathQuery() en %2526.

Actualmente estoy solucionando esto básicamente reparando el daño después:

URI aURI = new URI( "http://host/index.php?title=" + title.replace("&", "%26") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery().replace("%2526", "%26"));

Pero hay tiene Parece una forma más agradable de hacer esto, ¿verdad?Tenga en cuenta que el título puede contener cualquier cantidad de caracteres UTF-8 impredecibles, etc., por lo que escapar de todo lo demás es un requisito.

¿Fue útil?

Solución

Aquí tienes:

import java.net.URLEncoder;
...
...
URI aURI = new URI( "http://host/index.php?title=" + URLEncoder.encode(title,"UTF-8") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getPathQuery());

Controlar java.net.urlencoder para más información.

Otros consejos

¿Por qué llamas getAcapedPathQuery () si no quieres escapar? Simplemente decida quién es la responsabilidad y sea consistente.

Utilizar el Codificador de URL clase.

Clase de utilidad para codificación de formularios HTML.Esta clase contiene métodos estáticos para convertir una cadena en el formato MIME de aplicación/x-www-form-urlencoded.Para obtener más información sobre la codificación del formulario HTML, consulte la especificación HTML.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top