3

POSTデータを受信するサーブレットがあります。このデータはx-www-form-urlencodedであるため、サボテンなどの文字列はサボテンにエンコードされます。

この文字列を正しい文字にエンコード解除するにはどうすればよいですか?使ってみURLDecoder.decode("encoded string", "UTF-8");ましたが、違いはありません。

エンコードを解除したいのは、このデータをWebページに表示する前に、エスケープして&に移動するためです。現在、エンコードされた文字列の&sをエスケープしているため、文字が正しく表示されません。

4

4 に答える 4

5

これらはURL エンコーディングではありません 。のように見えたでしょう。これらは10 進数の HTML/XML エンティティです。HTML/XML エンティティのエスケープを解除するには、Apache Commons Langを使用します。%E3%82%B5%E3%83%9C%E3%83%86%E3%83%B3 StringEscapeUtils


コメントに従って更新します。応答エンコーディングが UTF-8 でない場合、疑問符が表示されます。JSP を使用している場合は、ページの先頭に次の行を追加するだけです。

<%@ page pageEncoding="UTF-8" %>

詳細については、この記事の途中にあるソリューションを参照してください。正規表現は世界支配の準備をしていないので、正規表現をいじるよりも UTF8-all-the-way を使用することをお勧めします。

于 2011-01-10T22:51:49.137 に答える
1

これはブラウザの機能/バグです。Webページが制限された文字セット(ASCIIなど)であり、ユーザーがフォームフィールドに文字セットの外側の文字を入力した場合、ブラウザはこれらの文字を次の形式で送信します。$#xxxx;

ユーザーが実際に入力$#xxxx;すると、そのまま送信されるため、問題になる可能性があります。したがって、サーバーには2つのケースを区別する方法がありません。

最善の方法は、UTF-8などのすべての文字をカバーする文字セットを使用することです。これにより、ブラウザはこのトリックを実行しません。

于 2011-01-11T00:03:22.590 に答える
0

勝手な推測ですが、Tomcat を使用していますか?

その場合は、Tomcat で UTF-8 の URIEncoding を使用してコネクタを設定していることを確認してください。ウェブ上でGoogleにアクセスすると、次のようなヒットがたくさん見つかります

Java WebアプリケーションでUTF-8を動作させるには?

于 2011-01-10T22:51:30.390 に答える
0

正規表現はどうですか?

Pattern pattern = Pattern.compile("&([^a][^m][^p][^;])?");
Matcher matcher = pattern.matcher(inputStr);
String output = matcher.replaceAll("&amp;$1");
于 2011-01-10T22:51:49.357 に答える