• 締切済み

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; } =========================================

noname#241583
noname#241583
  • Java
  • 回答数2
  • ありがとう数3

みんなの回答

回答No.2

No1 です。すいません。訂正です。 request.getCharacterEncoding() は信用できないようですね。 ちょっと手近で試してみたらどうやっても null が返ってきました。 なので、決め打ちでエンコーデイングに Shift_JIS や Window-31J を 指定されてみたらいかがでしょう? No. 1 で書いたように、setCharacterEncoding を使うと、後で 変換がいらないので楽だと思います。

回答No.1

なんとなくサーブレットの書き方が古風な気がしますが、 情報不足ですね。 ■TOMCAT はなんでしょう? ■request.getCharacterEncoding() は何を返していますでしょうか? とりあえず、getCharacterEncoding() で取得した Encoding文字列 を setCharacterEncodingに渡してから、getParameter("regist_mail") で文字を 取り出してはいかがでしょう? 最近の Tomcat なら、正しく文字を受け取ると思います。 この場合、getParameter("regist_mail")が返す文字列は変換不要のはずです。

関連するQ&A

  • POSTされた値をEUCで表示したい

    <?php echo '<html><head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> </head> <body> <form action="test2.php" method="POST"> <input name="str1" value="テストです"> <input type="submit"> </form> </body></html>'; exit; } ?> こうして送信されたデータは <?php echo '<html><head> <meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS"> </head><body>'; echo $_POST['str1']; ・・・・・ として表示しますが、このままのテストソースではSJISで普通に表示されますが、EUCで表示するにはWindowsの中のphp.iniを編集すればよいと思います。 どのようにすればよいですか? test2.phpが・ニ・ケ・ネ、ヌ、ケと表示したら成功です。

    • 締切済み
    • PHP
  • $HTTP_POST_VARSの値の受け渡しについて。

    PHP側でフォームで入力した内容をPOSTで受け渡すように しているのですが、 ☆HTML側☆ <FORM NAME="f1" ACTION="/point.php" METHOD="POST"> <TABLE> <TR><TD NOWRAP ALIGN="right"><font color="#444444"><b>記入者</b> </font></TD><TD>:</TD> <TD><input type="text" size="25" name="signedname" value="{val signedname}"> </TD></TR> </TABLE> </FORM> ☆PHP側☆ $req_data = $HTTP_POST_VARS; echo($req_data['signedname']); 特定の名前のときにPOSTからも値が返ってきません。 例えば、テキストに東と入力すると値が入るのですが、 西と入力すると値がわたりません。 なにか考えられる原因はあるのでしょうか? 文字コードはEUCで統一しています。 ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • HttpURLConnection転送で漢字表示

    お世話になっております。 掲題の質問について、ご教示いただけないでしょうか。 【質問】 サーバーAのサーブレットA1より、 サーバーBのサーブレットB2へ漢字をPOSTしようとしています。 エンコードはサーブレットA1,B2ともにShift_JISを使用しています。 しかし、A1より送信した漢字のデータをB2で表示させると"?"になってしまいます。 どなたかサーブレットB2でもShift_JISとして、漢字表示させる方法をご教示ください。 【サーブレットA1の該当箇所】 URL url = new URL("サーブレットB2のURL"); HttpURLConnection conn = (HttpRLConnection) url.openConnection() ; conn.setRequestMethod("POST"); conn.setRequestProperty("Accept-Language","ja"); conn.setDoOutput(true); PrintWriter writer = new PrintWriter(new OutputStreamWriter(conn.getOutputStream() , "Shift_JIST") ; writer.print("data=漢字"); 【サーブレットB2の該当箇所】 public void doPost(HttpServletRequest req, HttpServletResponce resp){ try{ req.setCharacterEncoding("Shift_JIS"); resp.setContentType("text/html;charset=Shift_JIS"); System.out.println( req.geParameter("data") ); }catch(Exception e){ System.out.println(e); } } 以上、宜しくお願いいたします。

    • ベストアンサー
    • Java
  • ファイルの一部をhtmlにしたい

    初心者です。 PHPを使ってできるかわからないのですが、 CGIで出力されたファイル(a.dat)の一部を違うHTMLファイル(b.html)にしたいと思っています。 この場合どうやったらいいでしょうか? CGIの掲示板などをせっちするのはできるのですが、 PHPは初めてです。できるかどうかわかりませんが 質問させてください。よろしくお願いします。 ---a.dat----- aaaa bbbb cccc ------------ ---b.html---- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS" /> <meta name="robots" content="noarchive" /> <title>pickup</title> </head> <body> bbb </body> </html> ---------------

    • 締切済み
    • PHP
  • 変数と日本語文字列を比較する方法とは?

    いつもお世話になっております。 変数と日本語を比較する簡単な方法を教えてください。 <input type="submit" name="update" value="更新"> という更新ボタンをJSPから押すと、 public void doPost(HttpServletRequest request,HttpServletResponse) request.setCharacterEncording("Shit_JIS"); request.setContencType("text/html; charset=Shift_JIS"); String str = getParameter("name"); System.out.println("s="+ s);  で、str=更新という値を取得します。 このあと、 if(str=="更新")  { 更新用サーブレットへ }   else { それ以外の処理へ } としたいのですが、str=="更新"の比較ができず、if文が機能しませんでした。 コンソールへは「s=更新」と出力できるのですが。 日本語文字列の比較の問題と思うのですがリクエストの文字コードをShift-JISに設定するだけでは対応できないものなのでしょうか? どうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • mb_http_output()のあと、サーバーにより挙動が違う

    対処はしたのですが、すこし腑に落ちない点があります。 MySQL、PHPすべての文字コードをUTF-8にしています。 しかし携帯がShift-JISなので、出力時に帳尻を合わすためmb_http_output()を使いました。  $str="内容は、METAタグのContentも含め全部UTF-8のHTMLソースです。";  mb_http_output("Shift_JIS");  $str=str_replace('content="text/html; charset=utf-8"','content="text/html; charset=Shift_JIS"',$str);  exit($str); テストサーバーでは正常にShift_JISで表示されました。 携帯でも確認済みです。 しかし実際のサーバー(さくらインターネットのスタンダード)だと 2行目と3行目の間に  mb_convert_encoding($str,'SJIS','UTF-8'); を挟まないとUTF-8のまま出力されてしまいます。 php.iniでmbstring.*はすべて同じ値にしましたが 違いは埋まりませんでした。 環境設定で何が違うと、 このようなことが生じるのでしょうか?

    • ベストアンサー
    • PHP
  • phpでメール送信

    phpでメール送信を行ってもメールが来ません。 普通のメールアドレスです。使っているサーバーはちゃんとphpが つかえるようです。ソースは下記です。訂正するところなどありまし たらよろしくお願いします。 ソース:(ホーム)<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>sample</title> </head> <body> <form action="1.php" method="post"> ホームページの名前:<br> <input type="text" name="subject" size="30" value=""><br> ホームページのアドレス:<br> <input type="text" name="name" size="30" value=""><br> メールアドレス:<br> <input type="text" name="mail" size="30" value=""><br> ホームページの紹介文:<br> <textarea name="message" cols="30" rows="5"></textarea><br> <br> <input type="submit" value="送信する"> </form> </body> </html> 送信側:<?php mb_language("Japanese"); mb_internal_encoding("SHIFT-JIS"); $message = "ホームページのアドレス:" . $_POST["name"] . "\nホームページの紹介文:" . $_POST["message"]; if (!mb_send_mail("めーるアドレス@メールアドレス.jp", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("メールの送信に失敗しました。"); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>sample</title> </head> <body> <p>メールが送信されました。</p> </body> </html>

  • 関数の中にif文を入れると「関数は値を返しません」

    どなたかよろしくお願いします。(windowsXP、FlashCS3pro) 関数の中にif文(switch文)を入れると「関数は値を返しません」というコンパイルエラーが出ます。 どこか間違ってますでしょうか。もしくはこれは仕様でしょうか。 エラーが出る ------------------------- xTest("1"); function xTest(req:String):String { if (req == "1") { return req; } } //実行結果:エラー1170「関数は値を返しません」 ------------------------- ちなみにこれだとエラーはでません。 ------------------------- xTest("1"); function xTest(req:String):String { return req; } //実行結果:1 ------------------------- また、関数内にif文を入れても、関数の型指定をしなければエラーは出ません。 ------------------------- xTest("1"); function xTest(req:String) { return req; } //実行結果:1 ------------------------- よろしくお願いします。

    • ベストアンサー
    • Flash
  • Perl 強制終了の回避について

    Attempt to free unreferenced scalar とは? http://oshiete1.goo.ne.jp/qa4237453.html の続きです。 とりあえず、下に現状で分かる最小限の再現性があるスクリプトを 書いておきます。 print &opentmpl("body"); print &opentmpl('footer'); # これがない場合はエラーにならない sub opentmpl { my $fn = shift; my $VAR = shift || {}; my $file = &{$fn}(); &regex(\$file, $VAR, '__([A-Z_\d]+?(\[\d+?\])?)__', ['$VAR->{"%s"}', '$1']); &regex(\$file, $VAR, '&{(.+?)}&', ['%s', '$1']); return $file; return undef; } sub regex { my $str = shift; my $VAR = shift; my $pattern = shift; my $replace = shift; $$str =~ s/((([^\n]*?)$pattern(?=.*))+(\n?))/&func($1, $VAR, $pattern, @$replace)/egs; return; } sub func { my $str = shift; my $VAR = shift; my $pattern = shift; my $buf = shift; $str =~ s/$pattern/$@ = ''; $_ = eval(sprintf($buf, map { eval($_); } @_)); $@ ? $@ : $_/egs; if($str =~ /^\s*\n?$/s) { return; } return $str; } sub body { print "Content-type: text/plain; charset=shift_jis\n\n"; return <<'HTML'; &{ return &opentmpl('table', {'TEST' => 'test'}); }& HTML } sub table { return <<'HTML'; __TEST__ HTML } sub footer { return <<'HTML'; test HTML } 調べてみた限りではActivePerl for Win32以外のPerlでも同様のよう です。 (Linux上でも同様のようです) 5.8.8ではエラーになりますが、5.10.xではエラーにならないようです。 (同じ環境において5.8.8では再現し、5.10.0にバージョンアップすると 再現しなくなり、再度5.8.8にバージョンダウンすると再現します) 本番機の環境が5.8.8で勝手にバージョンアップなどができないため、 5.8.8で正常に動作するようにするにはどうしたらよいでしょうか。 結構、無駄も多いと思いますので全く同じ動作をしながらより効率の いい書き方ができたらいいなと思います。 (なお、実際には使用しているけど上記では使用していない部分が 含まれていてその部分がない場合もエラーにならないようです)

    • ベストアンサー
    • Perl
  • お問い合わせフォーム sessionについて

    自分でお問い合わせフォームを作ってみようと思い、 PHPでちょこちょこと色々なサイトを参考に作成してみています。 なかなか進まず、今つまずいているのが、sessionです。 お問い合わせを書き込んだ画面から確認画面に移行したいのですが、 移行した後の入力情報がうまく表示できません。 <?php session_start(); $check = 1; $em = ""; $name = $_POST["name"]; $mail = $_POST["mail"]; $tel = $_POST["tel"]; $naiyo = $_POST["naiyo"]; //エラーチェック if ($name == "") { $check = 0; $em = "<li>お名前をご記入ください。</li>"; } if ($mail == "" && $tel == "") { $check = 0; $em .= "<li>メールアドレスまたは、電話番号をご記入ください。</li>"; } if ($mail != "") { if (!ereg("[a-zA-Z0-9_.¥-]+@[a-zA-Z0-9_.¥-]+", $mail)) { $check = 0; $em .= "<li>メールアドレスをお確かめください。</li>"; } } if ($naiyo == "") { $check = 0; $em .= "<li>お問い合わせ内容をご記入ください。</li>"; } if (!$check) { $em = "<ul>".$em."</ul>"; } else { $_SESSION["name"] = $name; $_SESSION["mail"] = $mail; $_SESSION["tel"] = tel; $_SESSION["naiyo"]= naiyo; header("Location: confirm.php"); } ?> 確認ページ <?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 10.0.0.0 for Windows"> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY> 名前 <?php echo($_SESSION["name"]); ?><br> メールアドレス<?php echo($_SESSION["mail"]); ?><br> </BODY> </HTML> 全くの初心者ですので根本的に分かっておらず、教えがいがないかも 知れませんが...。すみません。よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう