Domanda

Quindi ho del codice Java che utilizza Jakarta HttpClient in questo modo:

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

Il problema è che se title Include eventuali amperdi (&), sono considerati delimitatori di parametri e la richiesta diventa incasinata ... e se li sostituisco con l'equivalente escapato all'URL %26, quindi questo viene a doppio scapo %2526.

Attualmente sto lavorando intorno a questo, in sostanza riparando il danno in seguito:

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

Ma lì ha Essere un modo più bello per farlo, giusto? Si noti che il titolo può contenere qualsiasi numero di caratteri UTF-8 imprevedibili, ecc., Quindi sfuggire a tutto il resto è un requisito.

È stato utile?

Soluzione

Ecco qui:

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

Dai un'occhiata java.net.urlencoder per maggiori informazioni.

Altri suggerimenti

Perché chiami getScapeDPathQuery () se non vuoi la fuga? Basta decidere chi è la responsabilità ed essere coerente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top