Pergunta

Então, eu tenho um código Java que usa Jakarta HttpClient assim:

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

O problema é que se title inclui qualquer e comercial (&), eles são considerados delimitadores de parâmetro e a solicitação fica complicada ...e se eu substituí-los pelo equivalente com escape de URL %26, então isso recebe escape duplo de getEscapedPathQuery() em %2526.

Atualmente estou resolvendo isso basicamente reparando os danos posteriormente:

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

Mas lá tem para ser uma maneira melhor de fazer isso, certo?Observe que o título pode conter qualquer número de caracteres UTF-8 imprevisíveis, etc., portanto, escapar de todo o resto é um requisito.

Foi útil?

Solução

Aqui está:

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());

Verificar java.net.urlencoder para mais informações.

Outras dicas

Por que você está ligando para getescapedPathQuery () se você não quer a fuga? Basta decidir quem é a responsabilidade e seja consistente.

Use o URLEncoder aula.

Classe utilitária para codificação de formulário HTML.Esta classe contém métodos estáticos para converter uma sequência no formato MIME APLICATIVO/X-WWW-FORM-FORM-URLECODED.Para obter mais informações sobre a codificação do formulário HTML, consulte a especificação HTML.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top