質問

だから私はこのようなJakarta httpclientを使用するいくつかのJavaコードを持っています:

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

問題は、その場合です title AmperSands(&)が含まれています。それらはパラメーター区切り文字と見なされ、リクエストは厄介になります...そして、それらをURLエスケープの同等物に置き換えると %26, 、それから、これはgetEscapedPathQuery()によってダブルエスケープされます %2526.

私は現在、基本的に損害を修復することでこれを回避しています。

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

しかし、そこに もっている これを行うためのより良い方法になるために、そうですか?タイトルには予測不可能なUTF-8 charなどを任意の数に含めることができるため、他のすべてを逃れることは要件です。

役に立ちましたか?

解決

どうぞ:

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

小切手 java.net.urlencoder 詳細については。

他のヒント

逃げることを望まないのに、なぜGetEScapedPathQuery()に電話しているのですか?それが誰であるかを決定し、一貫性を保つだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top