• ベストアンサー

メール送信後のHTMLが文字化けします

FORMからsendmailを利用してメールを送信し、その結果を「送信できた」、「未入力項目がある」などを出力するHTMLとして出力するcgiを作ったのですがHTML出力が文字化けします。 メールのsubjectやbodyは文字化けせず正常に送信できます。HTMLにはMETAタグでeuc-jpやshift_jisと色々とトライしました。cgiもshift_jisとeuc-jp両方で試しましたがどちらも文字化けします。文字化けしているときにブラウザのエンコードで自動選択すると、ブラウザがcgiの使用コードに自動的に合わせてくれて正常に表示してくれますがこれがcgiを起動するたびで面倒です。エンコードを自動選択しないと文字化けしてそのときのブラウザが選択している文字コードは「西ヨーロッパ言語(ISO)です。 どうしたらブラウザに使用している文字コードを認識させるられるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.3

>これはスクリプトがまずいんでしょうか? print "Content-type: text/html\n\n"; はHTTPヘッダと言いまして、HTMLを送信する前に『一度だけ』ブラウザに対して送信しなければならない宣言文になります。 つまり、お話しからすると書き加えた事によって2回送信された事になります。 スクリプトの途中に他に送信している行が見付かりませんでしょうか? ところで、Webサーバの方でデフォルトのcharsetがISO-8859-1に設定されたままになっている様ですね。 出来ればWebサーバであるapache(挙動からapacheだと思われます)の設定ファイルに一文細工したいところ。

frfr
質問者

補足

回答ありがとうございます。 CGIモジュールを使用しています。その中で print $query->header; と記述していました。そこでこの行を削除したところ「Content-Type: text/html; charset=ISO-8859-1」は表示しなくなりました。他人の作ったCGIのためよく知らないで使用していました。これで私の質問は「完全解決」しました。ありがとうございました。 >出来ればWebサーバであるapache(挙動からapacheだと思われます)の設定ファイルに一文細工したいところ。 apacheを使用しています。設定ファイルとはhttpd.confだと思いますが、具体的にはどこをどうすればいいのか教えていただければ幸いです。本題とは少し外れますが宜しくお願いします。

その他の回答 (3)

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.4

httpd.conf の記述に、 >AddDefaultCharset ISO-8859-1 といった行が見つかった場合は、 >AddDefaultCharset Off とすると ISO-8859-1 をデフォルトとして出力しなくなります。

参考URL:
http://www2.i-e-c.co.jp/intro8.html
frfr
質問者

お礼

早速の回答、ありがとうございます。 使用しているのは OSはRedHatLinux7.3、apache-1.3.23ですが >AddDefaultCharset ISO-8859-1 といった行が見つかった場合は、、、 このような行は見つかりませんでした。バージョンが違うようです。しかし本題は解決しました。 ありがとうございました。

  • NINJA104
  • ベストアンサー率43% (133/306)
回答No.2

たぶんperl辺りのスクリプト言語でcgiを書いているものだとします。 HTMLを出力する直前に、 > print "Content-type: text/html\n\n"; といった行が有るのではないかと思いますが、そこを > print "Content-type: text/html;charset=shift_jis\n\n"; 等として【HTTPヘッダ】にて明示的に文字コードを指定する様にします。 当然、出力するHTMLの"実"文字コードもそれに合わせてあげないといけません。 オマケ:明示的な文字コードの指定と実際のHTML内の文字コードが一致しているかどうかをデバグする際はIEよりもNN7が適している様です(経験談) :-)

frfr
質問者

補足

回答ありがとうございます。 >たぶんperl辺りのスクリプト言語でcgiを書いているものだとします。 perlで書いています。 >HTMLを出力する直前に、 >> print "Content-type: text/html\n\n"; >といった行が有るのではないかと思いますが、そこを >> print "Content-type: text/html;charset=shift_jis\n\n"; >等として【HTTPヘッダ】にて明示的に文字コードを指定する様にします。 実は「print "Content-type: text/html\n\n"; 」は記述してありませんでした。そこでこれを記述すると文字化けはなくなりましたがブラウザのトップ部分にContent-Type: text/html; charset=ISO-8859-1 が表示されてしまいます。しかもスクリプトの先頭部分(#!/usr/local/bin/perl)直後に記述すれば文字化けはなくなりますがエラー処理やメール送信処理が終わった後のHTML出力直前に記述するとやはり文字化けします。 これはスクリプトがまずいんでしょうか? print "Content-type: text/html に「charset=shift_jis」を明記してもしなくても結果は変わらないようです。

  • yomo3
  • ベストアンサー率32% (88/269)
回答No.1

えーと、HTML表示のヘッダー部分を下記のようにしてみてください。 <!DOCUTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>あなたのページの名前</title> </head> <html>タグのlang="ja"がポイントです。

frfr
質問者

補足

回答ありがとうございます。 ><html>タグのlang="ja"がポイントです。 lang="ja"はすでに記述済みですが文字化けします。

関連するQ&A