- 締切済み
AUの一部携帯でHTMLをPOSTすると、値が空
AUのK006やNS01の機種にて、下記のHTMLからPOSTをしたところ、サーブレット側にてパラメータ(regist_mail)の値が空となってしまいます。 S61Tの機種で試したら正常に取得できることから、原因が判明しておりません。どなたかご教授をお願いいたします。 HTMLやサーブレット側のファイルの内容は下記のとおりです。 ■HTML側 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta name="robots" content="noindex,nofollow"> </head> <body> <form method="POST" action="/test/servlet/testentry"> <input size="20" maxlength="200" name="regist_mail" value="xxxxx@ezweb.ne.jp"><br> <input type="submit" value="登録" name="entry"><br> </form> </body> </html> ■サーブレット側のポスト関数 public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // encFlag = 1 shif_jis変換する // encFlag = 2 無変換 int encFlag = 1; if ( req.getCharacterEncoding().toLowerCase().equals("shift_jis") ) { encFlag = 2; } //パラメータのregist_mailの文字列の長さをチェックする if ( convJp(req.getParameter("regist_mail"), encFlag).length() > 0 ) { // //ここにきてしまう。 } ■サーブレット側の共通関数 public static String convJp(String str, int encFlag) { try { if (encFlag == 1) { return new String(str.getBytes("iso-8859-1"), "Shift_JIS"); } } catch ( Exception e ) { e.printStackTrace(); return null; } return str; } =========================================
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
No1 です。すいません。訂正です。 request.getCharacterEncoding() は信用できないようですね。 ちょっと手近で試してみたらどうやっても null が返ってきました。 なので、決め打ちでエンコーデイングに Shift_JIS や Window-31J を 指定されてみたらいかがでしょう? No. 1 で書いたように、setCharacterEncoding を使うと、後で 変換がいらないので楽だと思います。
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
なんとなくサーブレットの書き方が古風な気がしますが、 情報不足ですね。 ■TOMCAT はなんでしょう? ■request.getCharacterEncoding() は何を返していますでしょうか? とりあえず、getCharacterEncoding() で取得した Encoding文字列 を setCharacterEncodingに渡してから、getParameter("regist_mail") で文字を 取り出してはいかがでしょう? 最近の Tomcat なら、正しく文字を受け取ると思います。 この場合、getParameter("regist_mail")が返す文字列は変換不要のはずです。