cgiフォームメールで謎の文字化け。ヘルプを・・・


http://u28.jp/inquiry/index.html
上記のURLに設置したフォームからメールを送信すると、
送信されたメールが文字化けします。
文字化けの内容は、漢字だらけ、まるで中国語みたいなメールになるというものです。

【概要】
CSSにて文字コードをUTF-8に指定しています。
ページのヘッダーでcharsetをUTF-8にしています。
届くメールは、メールタイトルはきちんと表示されています。
本文のみ、漢字だらけの文字化けです。

フォームのcgiは下記のような内容です。
http://u28.jp/inquiry/cgi.txt
(コードをテキストファイルにコピペしました)
実際はsendmail.cgiというファイル名で
動作しています。

このcgiを別のhtmlから動かすと、
(例:http://www.u28.jp/inquiry/input.html
文字化けせずにきちんとメールが届くので、
cgiプログラムの問題ではなさそう・・・と思っています。
(css?JavaScript?はまって抜け出せません)

何度やっても、到着するメールは文字化けしています。

症状は以上です。
どなたか、お気づきの点などがありましたら
アドバイスをお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/05/12 09:32:27
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:Bookmarker No.1

回答回数191ベストアンサー獲得回数34

ポイント35pt

この CGI スクリプトが文字コードの変換に使用している jcode.pl は、UTF-8 には対応していません。

対応している文字コードは、ISO-2022-JP, EUC-JP, Shift_JIS の 3 つです。

一般的に、Web ブラウザーはフォームに入力されたデータをページの文字コードで CGI へ送る(と思う)ので、ページの文字コードを上記の何れかにする必要があると思います。


また、この CGI スクリプトは、入力データの文字コードの判別を jcode.pl の自動判別に頼っているので、判別に失敗する可能性があります。

id:kyoto_kyoto

早速の回答ありがとうございます。

申し訳ないのですが、もう少しだけ詳しく教えていただけますでしょうか。

・文字コードの設定はどのようにしたらよいのでしょうか?

(不思議なことに、css・ページヘッダをShift_JISに変更しても、

なぜか文字化けが起きてしまったのです。これ以外の要素で

文字コードに影響をおよぼすものがあるのでしょうか??)

申し訳ないのですが、

もう少しだけ突っ込んで教えていただければ幸いです。

2008/05/10 01:17:28
id:hirotow No.2

回答回数131ベストアンサー獲得回数10

ポイント50pt

・CGIのファイルをエディタで開く

・使用する文字コードを決める(SJIS=0x5C問題がある/JIS=容量が大きくなる/EUC=あまり一般的でない)など一長一短ですのでよく考えましょう。

・出力するHTMLに、「<meta http-equiv="content-type" content="text/html;charset=shift_jis"/>」のようなメタタグを追加します。

・エディタで文字コードを指定して保存します。(文字コードの指定は保存ダイアログか書式メニューあたりにあることが多いです)

またCSSの文字コードはまったく関係ない、というかHTML/CGI双方ともCSSの記述は見当たりませんし、HTMLは実際の文字コードはSJISなのにメタタグはUTF-8になっているので文字化けしています。

最後に助言ですが、基礎的な用語の意味を間違えているようなので基礎から勉強しなおすことをお勧めします。

id:kyoto_kyoto

「ファイルそのものの文字コード」ですね。

アドバイスありがとうございます。

今まで深く理解せずに取り組んでいたことがわかったので、

もう一度基礎から勉強してみます。

2008/05/12 00:39:40
  • id:Bookmarker
    >>
    不思議なことに、css・ページヘッダをShift_JISに変更しても、なぜか文字化けが起きてしまったのです。
    <<

    念のためお聞きしますが、ヘッダーの charset の値だけでなく、XHTML ファイル自体の文字コードも変更しましたか?
  • id:tezcello
    CSS やページヘッダ(たぶん head タグ内の meta タグでの指定)を変えてもダメだと思いますよ。
    ブラウザはWebサーバが送って来るHTTPヘッダを見ているので。

  • id:Bookmarker
    >>http://q.hatena.ne.jp/1210346352#c121193

    meta タグよりも HTTP ヘッダーの方を優先するのはその通りなんですが、
    質問者さんが示したページでは、HTTP ヘッダーで文字コードを送ってきていません。
  • id:ardarim
    ヘッダだけではなくて、ちゃんと実際の「ファイルの文字コード」を変えたんでしょうか?
    ヘッダ(metaタグ)の指定と実際の文字コードが矛盾しているのでは。

    ヘッダと実際の文字コードが食い違っている場合は、ブラウザ(特にIE)はヘッダを無視しますよ。
    shiftjisに変更した、といった時にブラウザで見てみてエンコーディングがちゃんとシフトJISと表示されていますか?
  • id:kyoto_kyoto
    みなさんありがとうございます。

    「メタタグでの文字コード指定」と
    「ファイルそのものの文字コード指定」を
    混同していた(よく理解していない)ことが
    理由のようです。

    もう一度、文字コードをよく確認しながら
    進めてみたいと思います。

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

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません