• 締切済み

ファイヤーフォックスでフォームが文字化けがします。

お世話になります。 自分で作ったサイトですが、 入力フォームの氏名を書き込んで、それをクッキーに保存して、それを呼び出すと、入力した名前が文字化けしてしまいます。 自分で作ったといっても、無料配布のCGIです。 これはファイヤーフォックスの問題でしょうか? 私の環境は、Windows8.1 です。 ちなみに、その部分の内容は、次の通りです。 print "<FORM METHOD=\"POST\" ACTION=\"./bbs.cgi\" ENCTYPE=\"multipart/form-data\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"modify\">\n"; print "<input type=hidden name=\"no\" value=\"$main_no\">\n"; }else{ print "<FORM METHOD=\"POST\" NAME=\"F1mode\" ACTION=\"./bbs.cgi\" ENCTYPE=\"multipart/form-data\" onSubmit=\"return chuuikakunin()\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"add\">\n"; } 正直なところ詳しいことはよく分かりませんが、 onSubmit=\"return chuuikakunin()\" ↑これは、JavaScriptを使って名前の入力が無いとアラートで知らせるためのものだと思われます。 よろしくお願い致します。

  • HTML
  • 回答数4
  • ありがとう数13

みんなの回答

  • balloon23
  • ベストアンサー率69% (16/23)
回答No.4

先の回答者が説明している通り、formに送信文字コード指定するのが簡単かなとは思います。 あと参考までに思いつくものをいくつか。   ・ファイルの文字エンコード(htmlの指定と別の場合が……) ・htaccessの設定 CGIの中身がわかりやすいものでしたら 送信先の部分で、展開前に 文字エンコーディングの自動判別→データ変換という手も使える…かも……

kitaone
質問者

補足

No.3のORUKA1951さんのご回答のように、 formに、Accept-charset=\"Shift_JIS\" を入れてみました。 ダメでした。ファイヤーフォックスだけだめです。 他のブラウザは大丈夫でした。 次に、ネットで調べて、名前の入力部品に次のように入れてみました。 <INPUT TYPE = \"text\" name = \"name\" SIZE = \"30\" VALUE=\"$c_name\" onclick=\"org=document.charset; document.charset=\'shift_jis\'; document.f1.submit();document.charset=org;\" maxlength=10> これもダメでした。 結局、あと残りの方法で、No.3のORUKA1951さんに教えてもらった $xx =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; が、まだ残っておりますが、どこに入れていいもの分からないので試していません。 ファイヤーフォックスとWindows8.1の問題でしょうか? でも、他のサイトは大丈夫なので、やっぱりクッキーの問題でしょうか? すみません。でも、ありがとうございました。方法はありそうなので少し安心しました。 どちらにしても、私の能力を超えている問題です(:_;)情けないですが。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.3

>これはファイヤーフォックスの問題でしょうか?  ということは、他のブラウザでは文字化けしないということですか??  本来は、formにcharsetが指定されていない場合は、それが含まれるHTMLのcharsetで送信されます。文字コードによってその数値は異なります。  受け取ったCGI側で文字コードが判別できない場合とか、cookieにする時にきちんとURL変換されていないと・・ Perlでしたら $xx =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; 名前の入力チェックでしたらjavascriptは関係ありません。

kitaone
質問者

お礼

ファイヤーフォックス以外は文字化けしません。 よく見ると、クッキーに保存された文字が、2回目は倍の長さになっています。 文字化けした文字がさらに増殖して文字化けしている感じです。 CGIはPerlです。 その他のことは難しいので調べてテストしてみます。 ありがとうございました。

回答No.2

文字コードちゅうもんがあるわけですよ。 「あ」とか「い」とか書いてても本当は番号なわけですよ。 http://www.seiai.ed.jp/sys/text/java/shiftjis_table.html んでもって文字コードには面倒なことに種類がいくつかあるのですね。 utf-8 euc-jp shift-jis などなど なので、同じ「あ」て書いたとしても、実際は番号なので、 その番号を他の文字コードと勘違いして、対応表に照らしあわせて表示したら全く別の文字になるわけですよ。 俗にいう文字化けです。 フォームが表示されている文字コード → 多分ブラウザはこの文字コードでpealに入力したデータを投げるでしょう。 プログラム内部で受け取って処理するのですが、内部では別の文字コードとして取り扱ってる などなど、ちゃんと文字コードの事を考えずに作ると文字化け地獄です。 質問内容を見るにご自分で制作されたものではないでしょうから、設置マニュアル等を探してみてください。

kitaone
質問者

お礼

HTMLのヘッダー部は、charset=Shift_JISとしています。 他の、文字コードにしてみると、ファイヤーフォックスはもちろん、IEやGoogle Chromeやサファリでも文字化けします。 Shift_JISだけがファイヤーフォックスで文字化けします。 もうちょっとテストしてみます。 ありがとうございました。

回答No.1

プログラムで出力されるHTMLの文字コード プログラムの内部の文字コード 2つがてんでバラバラなのでは?

kitaone
質問者

お礼

すぐに少し詳しくご回答いただきありがとうございました。

kitaone
質問者

補足

すいません、もう少し詳しく教えてください。お願いします。

関連するQ&A

  • 文字の表示色を変えたい

    いつも、ありがとうございます。 下の記述で、<他社より安い場合は・・・>の文字を 青くしたいのですが、いろいろとやっても、 青文字になってくれません。 500 Internal Server Error になってしまいます。 どうやれば、青文字になりますか? **********記述文************************ print "<table>\n"; print "<tr>\n"; print "<td>\n"; print "<form action=\"$script\" method=\"POST\" target=\"_blank\">\n"; print "<input type=hidden name=mode value=note>\n"; print "<input type=hidden name=job value=blank>\n"; print "<input type=submit value=ご 利 用 方 法></form>\n"; print "</td><td>\n"; print "<form action=\"$home\" method=\"POST\" target=\"_self\">\n"; print "<input type=hidden name=mode value=_top>\n"; print "<input type=hidden name=job value=blank>\n"; print "<input type=submit value='ト ッ プ へ 戻 る'>\n"; print "</form></td></tr></table> <他社より安い場合は、ご相談ください。>

    • ベストアンサー
    • CGI
  • CGIプログラムでのボタン表示のさせかた

    print "<form action=\"$script\" method=\"POST\" target=\"_blank\">\n"; print "<input type=hidden name=mode value=note>\n"; print "<input type=hidden name=job value=blank>\n"; print "<input type=submit value="説明表'>"</form>\n"; print "<form action=\"$home\" method=\"POST\" target=\"_blank\">\n"; print "<input type=hidden name=mode value=_top>\n"; print "<input type=hidden name=job value=blank>\n"; print "<input type=submit value='トップ'></form>\n"; というCGIプログラムの文章があるのですが、 上記の記述で実行すると、 「説明表」ボタンと、「トップ」ボタンが縦に並んで表示されてしまいます。 これを、横に表示させるようにするには、 どのように変更すばいいのでしょうか? 参考になるかわかりませんが、「説明表」をクリックして表示される文章は、 他のCGIプログラムの中に記述されています。

    • ベストアンサー
    • CGI
  • ボタン無しでフォーム内容送信

    <form name="regist" action="bbs.cgi" method="POST"> <input type="hidden" name="mode value="admin"> <textarea name=comment cols=50 rows=5 wrap=soft>コメント</textarea> <input type="submit" value="ボタン"> </form> 通常はボタンをクリックして移動しますが、送信ボタンを使わずに、bbs.cgiを表示しただけでフォーム内データを送信できればと考えています。どのようにすればいいのでしょうか。

  • onclickで複数のボタンで対応したCGIにデータを送りたいのですが。

    下記のような感じで、 1.画像追加ボタンを押すと別ページ(b.cgi)に飛んで登録が終わったらまたこちらに戻ってきて、登録が押されるとそのまま登録処理(a.cgi)になる。 2.画像追加がされていなくても登録が押されるとそのまま登録処理をする。 (1.2.ともform内の情報はhiddenですべて送ります。) こんな動きをさせたいのですが、参考サイトなどをみてもこういう動作をしているところがなくて丸3日悩んでいます。 onclick=submit の記述とJavascriptの書き方が問題だとは思うのですが煮詰まってしまいました。 皆様には初歩的な質問かもしれませんがどうぞよろしくお願いします。 <form method="post" enctype="multipart/form-data"> <input type="text" name="Title" value="" size="140"> <input type="text" name="Body1" value="" size="140" style="ime-mode: active;"> <input type="button" value="画像追加" onclick="submit(document.gazouform)"> <input type="button" value="登録" onclick="submit(document.tourokuform)"> <form action="a.cgi" method="post" enctype="multipart/form-data" id="tourokuform"> </form> <form action="b.cgi" method="post" enctype="multipart/form-data" id="gazouform"> </form>

  • 掲示板のコメント欄にあらかじめ文字を入れたい

    掲示板の設置をしています。 掲示板のコメント欄の中に、あらかじめこちらが伺いたいことを表示しておきたいのですが、どのようにしたらできるのでしょうか? sub in_form { print "<table cellspacing=1 cellpadding=0>\n"; print "<form action=\"$script\" method=POST enctype=\"multipart/form-data\">\n"; print "<input type=hidden name=mode value=\"newwrt\">\n"; &getcook; if (!$mode) { $submit = '投稿する'; } else { print "<input type=hidden name=rno value=\"$in{'no'}\">\n"; $submit = '返信する'; } print "<tr><td>名前</td><td><input type=text size=30 name=name value=\"$name\" style=\"ime-mode:active;\"></td></tr>\n"; print "<tr><td>HP</td><td><input type=text size=50 name=hp value=\"http://$hp\"></td></tr>\n"; print "<tr><td>題名</td><td><input type=text size=50 name=sub style=\"ime-mode:active;\"></td></tr>\n"; print "<tr><td valign=top><br>内容</td><td><textarea cols=65 rows=8 name=com style=\"ime-mode:active;\"></textarea></td></tr>\n"; print "<tr><td>画像</td><td><input type=file size=60 name=img></td></tr>\n"; print "<tr><td>削除キー</td><td><input type=password size=10 maxlength=8 name=pwd value=\"$pwd\"> (英数8文字以内)</td></tr>\n"; print "<tr><td></td><td><input type=submit value=\"$submit\"></td></tr></table></form>\n"; } おそらくこの部分を変えるのかなぁと思うのですが・・・どうすればいいのかわかりません。どなたかアドバイスいただけるとうれしいです。 よろしくお願い申し上げます。

    • ベストアンサー
    • CGI
  • _URL_の意味がわからない

    のですが例えば <FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD="POST"> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000"> Send this file: <INPUT NAME="userfile" TYPE="file"> <INPUT TYPE="submit" VALUE="Send File"> </FORM> においてファイルを入力してサブミットすればどういうことがおきるのでしょうか?

    • ベストアンサー
    • HTML
  • フォームから送った半角カナの文字化け回避

    こんにちは。 フォームのテキストボックスで半角カナを入力して送信すると、文字が化けることがあります。 どうにか回避できないでしょうか、、、^^; 「半角カナを入力するな!」という常識的な回答(笑)はナシでお願いします。^^; ちなみに、ソースは以下です。 最初submitのところのname属性を書いていなかった時はすべて文字化けを起こしていたのですが、name属性を追加したら最初の入力だけ化けることがある、という現象が置きました。 ちょっとはまってます、、、>< <? header( 'Content-Type: text/html;charset=Shift_JIS' ); echo( "<html>\n" ); echo( "<head>\n" ); echo( "<title>文字送信テスト</title>\n" ); echo( "</head>\n") ; echo( "<body>\n" ); if(isset($mode) == FALSE || $mode == ""){ echo( "<form action=\"test.php\" method=\"post\">\n" ); echo( "<input type=\"hidden\" name=\"mode\" value=\"1\">\n"); echo( "<input type=\"text\" name=\"KANA\" istyle=\"1\"><br>\n" ); echo( "<input type=\"submit\" name=\"\" value=\"送信\">\n" ); echo( "<input type=\"reset\" value=\"クリア\">\n" ); echo( "</form>\n" ); }else{ echo("KANA=$KANA<br>\n"); } echo("</body>\n"); echo("</html>\n"); ?>

    • ベストアンサー
    • PHP
  • ファイルのアップロードで文字化けします

    ファイルのアップロードを行うと特定文字以降の名前が消えてしまいます。 (予、表など2バイトコードに5Cが含まれる文字) コードは下のように書いています。 <form enctype="multipart/form-data" action="upload_fnc.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="30000"> <input name="userfile" type="file"> <input type="submit" value="Send File"> </form> サーバの動作環境はLinux(FedoraCore3)、Apache2.0.52、PHP4.3.10です。 クライアント側はほとんどがWindows(2000、XP)です。 どのようにして対処すればよいか分からなく困っています。 どなたかお分かりの方がいらしたら教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 特殊文字を含むフォームデータの受け渡し

    HTML+PHPでフォームを作っているのですが、 フォーム内のtextareaに特殊文字を含んだ場合に、フォームデータが全て渡って来ない場合があります。 このような現象の原因、対処法等ご存知の方がおりましたら、ぜひともご教授ください。 以下、現象の詳細です。-------------------------------- ・ccccの中に特殊文字(&trade;が文字参照になってない状態等)が入っている状態でsubmitすると、aaaaがPOST変数に入っていない。 ・valueの値が入ってないのではなく、aaaa自体が存在しません。 ・同様に書いているいくつかのフォームでも発生するものとしないものがある ---フォーム--- <form method="post" enctype="multipart/form-data" action="test.php"> <input type="hidden" name="aaaa" value="aaaa"> <input type="hidden" name="bbbb" value="bbbb"> <textarea name="cccc"> ---test.php--- 先頭で$_POSTをprintしてます。

    • 締切済み
    • PHP
  • スケジュール・カレンダーを携帯から

    無料配布されているスケジュール・カレンダーのCGIを使い、スケジュール表をUPさせましたが、パソコンから見るといいのですが、 携帯から見ると、 ・先月や来月に移るのに、フォームのイメージタグを使い、GIFファイルをつかい、(hiddenで)今月の月であったり、年であったりの情報を送っています。 しかし、これを携帯でみると、「LAST」アイコンではなく、テキスト入力欄になっていて、先月や来月へ移ることができません。 どうしてなのかが、わからないです。 たぶん、このあたりを変えるといいのだろうと思うのですが、どうしたらいいのかわかりません。 ーーーーーーーーーーーーーーーーーーーーーーーーーー sub dsp { print "<table width=",$calw-40," cellspacing=2 cellpadding=0><tr><td width=100><font size=\"+1\"><b>$logyear年</b></font></td>\n"; $mon = $logmon - 1; if ($mon < 1) {$mon = 12; $year = $logyear - 1;} else {$year = $logyear;} if (2002 < $year) { print "<td align=right><form action=\"$script\" method=\"POST\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"$mode\">\n"; print "<input type=\"hidden\" name=\"pass\" value=\"$inpass\">\n"; print "<input type=\"hidden\" name=\"year\" value=\"$year\">\n"; print "<input type=\"hidden\" name=\"mon\" value=\"$mon\">\n"; print "<input type=\"image\" src=\"$last_icon\"></td></form>\n"; } print "<td width=100 align=center><font size=\"+2\"><b>$logmon月</b></font></td>\n"; $mon = $logmon + 1; if (12 < $mon) {$mon = 1; $year = $logyear + 1;} else {$year = $logyear;} print "<td><form action=\"$script\" method=\"POST\">\n"; print "<input type=hidden name=mode value=\"$mode\">\n"; print "<input type=hidden name=pass value=\"$inpass\">\n"; print "<input type=hidden name=year value=\"$year\">\n"; print "<input type=hidden name=mon value=\"$mon\">\n"; print "<input type=image src=\"$next_icon\"></td></form><td width=100></td></tr></table>\n"; } ーーーーーーーーーーーーーーーーーーーーーーーーーー お願いします。

    • ベストアンサー
    • CGI

専門家に質問してみよう