5

したがって、次のような Jakarta HttpClient を使用する Java コードがあります。

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

問題は、titleアンパサンド (&) が含まれている場合、それらはパラメーター区切り文字と見なされ、リクエストがうまくいかないことです...そして、それらを 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 文字などをいくつでも含めることができるため、他のすべてをエスケープする必要があることに注意してください。

4

3 に答える 3

14

どうぞ:

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を確認してください。

于 2010-04-01T04:30:09.430 に答える
1

エスケープしたくないのに、なぜgetEscapedPathQuery()を呼び出すのですか?それが誰の責任であるかを決定し、一貫性を保つだけです。

于 2010-04-01T07:13:42.223 に答える
0

URLEncoderクラスを使用します。

HTML フォーム エンコーディング用のユーティリティ クラス。このクラスには、String を application/x-www-form-urlencoded MIME 形式に変換するための静的メソッドが含まれています。HTML フォームのエンコーディングの詳細については、HTML 仕様を参照してください。

于 2010-04-01T04:31:21.203 に答える