• ベストアンサー

"+"文字が" (スペース)"に文字化け?します

お世話になります。 2フレームの画面(画面A,画面B)にて 次の操作を行った場合、 「+」が入ったパラメタがうまく送信されません (1)画面Aに検索条件を入力 (2)画面Aの「検索ボタン」を押下 (3)該当する情報を画面Bに表示 普通は、 「検索ボタン」→サーブレット→画面Bのjsp という順番ですが 今回作っているものは 「検索ボタン」→画面Bのjspを呼び出す→画面Bのjsp内で、条件取得クラスを呼ぶ という作りです。 条件取得クラスを呼ぶ前に、入力された条件を 取得したいのですが、 入力条件に「+」が入っていると、「 (スペース)」に 変換されます。。。 例:入力条件「123+45」→「123 45」 原因・対処がおわかりの方、よろしくお願い致します --------------------------------------------- 【画面A→画面Bの呼び出し】 parent.画面B.location.href = '画面B.jsp?KEY=' + 入力値 (alert()でurlを見てみると→「画面B.jsp?KEY=123+45」) 【画面Bでの入力値取得】 String key = request.getParameter("KEY"); (System.out.printlnで見てみると「123 45」になる) ---------------------------- 【開発環境】 WinXP Weblogic8.1 JDK1.4.2 Ecripse2

質問者が選んだベストアンサー

  • ベストアンサー
  • potedora
  • ベストアンサー率47% (66/140)
回答No.3

>入力条件に「+」が入っていると、「 (スペース)」に 変換されます。。。 遷移先の画面B.jspでrequest.getParameter("KEY");を呼んでいますが、 getParameterはURL(画面B.jsp?KEY=' + 入力値)をURLデコードしてから値を取り出すからです。 URLデコードすると+はスペースに置き換えられます。 つまり、デコードされる前提ならば、URLをエンコードして置かないといけません。 具体的には以下のような感じだと思います。 A.jsp <%@page import="java.net.*"%> <html> <a href='b.jsp?key=<%= URLEncoder.encode("1+2") %>'>B.jsp</a> </html> B.jsp <%@page import="java.net.*"%> <html> <% out.println(request.getParameter("key")); %> </html>

Umin
質問者

お礼

potedoraさん、ご回答ありがとうございました。 ご指摘のとおり、URLEncoder.encode()を追加しましたら、うまくいきました! 具体的にソースまで書いていただき、 大変勉強になりました。 ありがとうございました!

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

検索に日本語とかはいるなら str = URLEncoder.encode(str) とした方がいいですね。

Umin
質問者

お礼

php504さん、再びありがとうございます。 URLEncoder.encode()を追加致しました。 うまくいきました!

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

+の代わりに%2Bを使えばいいと思います。 urldecode処理で+はスペースに変換され、%2Bは+に変換されるはずです

Umin
質問者

お礼

php504さん、ご回答ありがとうございます。 >urldecode処理で+はスペースに変換され 大変参考になりました!ありがとうございました

関連するQ&A