アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

自分で作ったサイトですが、
入力フォームの氏名を書き込んで、それをクッキーに保存して、それを呼び出すと、入力した名前が文字化けしてしまいます。

自分で作ったといっても、無料配布の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を使って名前の入力が無いとアラートで知らせるためのものだと思われます。

よろしくお願い致します。

A 回答 (4件)

プログラムで出力されるHTMLの文字コード



プログラムの内部の文字コード

2つがてんでバラバラなのでは?

この回答への補足

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

補足日時:2014/09/09 13:59
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/09/09 18:43

文字コードちゅうもんがあるわけですよ。



「あ」とか「い」とか書いてても本当は番号なわけですよ。
http://www.seiai.ed.jp/sys/text/java/shiftjis_ta …

んでもって文字コードには面倒なことに種類がいくつかあるのですね。
utf-8 euc-jp shift-jis などなど


なので、同じ「あ」て書いたとしても、実際は番号なので、
その番号を他の文字コードと勘違いして、対応表に照らしあわせて表示したら全く別の文字になるわけですよ。

俗にいう文字化けです。


フォームが表示されている文字コード → 多分ブラウザはこの文字コードでpealに入力したデータを投げるでしょう。
プログラム内部で受け取って処理するのですが、内部では別の文字コードとして取り扱ってる

などなど、ちゃんと文字コードの事を考えずに作ると文字化け地獄です。

質問内容を見るにご自分で制作されたものではないでしょうから、設置マニュアル等を探してみてください。
    • good
    • 0
この回答へのお礼

HTMLのヘッダー部は、charset=Shift_JISとしています。
他の、文字コードにしてみると、ファイヤーフォックスはもちろん、IEやGoogle Chromeやサファリでも文字化けします。

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

もうちょっとテストしてみます。

ありがとうございました。

お礼日時:2014/09/09 18:48

>これはファイヤーフォックスの問題でしょうか?


 ということは、他のブラウザでは文字化けしないということですか??

 本来は、formにcharsetが指定されていない場合は、それが含まれるHTMLのcharsetで送信されます。文字コードによってその数値は異なります。
 受け取ったCGI側で文字コードが判別できない場合とか、cookieにする時にきちんとURL変換されていないと・・
Perlでしたら
$xx =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;

名前の入力チェックでしたらjavascriptは関係ありません。
    • good
    • 0
この回答へのお礼

ファイヤーフォックス以外は文字化けしません。

よく見ると、クッキーに保存された文字が、2回目は倍の長さになっています。
文字化けした文字がさらに増殖して文字化けしている感じです。

CGIはPerlです。

その他のことは難しいので調べてテストしてみます。

ありがとうございました。

お礼日時:2014/09/09 18:52

先の回答者が説明している通り、formに送信文字コード指定するのが簡単かなとは思います。


あと参考までに思いつくものをいくつか。
 
・ファイルの文字エンコード(htmlの指定と別の場合が……)
・htaccessの設定

CGIの中身がわかりやすいものでしたら
送信先の部分で、展開前に
文字エンコーディングの自動判別→データ変換という手も使える…かも……

この回答への補足

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の問題でしょうか?
でも、他のサイトは大丈夫なので、やっぱりクッキーの問題でしょうか?

すみません。でも、ありがとうございました。方法はありそうなので少し安心しました。

どちらにしても、私の能力を超えている問題です(:_;)情けないですが。

補足日時:2014/09/10 10:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!