解決に至らなかったので再度お尋ねします。
CGIのコードを見てくださいますか。
http://hotpegasus.bov.jp/mail.txt
(必要な部分だけ表示しておりますので、そのままアップしても機能はしません)
改修した箇所は以下のです。
<meta http-equiv="Content-Type" content="text/html;charset=shift_jis">
&jcode'h2z_sjis(*contenido)
&jcode'convert(*subject,'sjis');
&jcode'convert(*infor,'sjis');
&jcode'convert(*contenido,'jis');
&jcode'convert(*res_msg,'jis');
print "Content-type: text/html;charset=shift_jis\n\n";
↓ sjis関連をutf8に書き換え、jcodeの頭文字をJに書き換え
<meta http-equiv="Content-Type" content="text/html;charset=utf8">
&Jcode'h2z_utf8(*contenido)
&Jcode'convert(*subject,'utf8');
&Jcode'convert(*infor,'utf8');
&Jcode'convert(*contenido,'utf8');
&Jcode'convert(*res_msg,'utf8');
print "Content-type: text/html;charset=shift_utf8\n\n";
require 'jcode.pl'をuse Jcode;に書き換え
※jcode::" となっている箇所はありません
結果
メールフォームはエラーや文字化けは出なくて成功しましたが、メール受信の際、ThunderbirdPortableメーラーでは全て文字化け(文字エンコーディングは「日本語ISO-2022jp」となっています)、ウェブメールのgmailでは内容は文字化けになっていませんが、タイトルが文字化けになっています。
どこが悪かったのでしょうか?
宜しくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
日本語文字を含むメールは、文字コードをISO-2022-JP(≒JIS)にするのが基本原則です。
また、ヘッダにASCII文字以外を使う場合はその部分のみをMIMEエンコードする必要があります。
SJIS、EUC、UTF-8を解釈できないメーラ(メールクライアント)はまだまだ多いです。
規格はずれの相当いいかげんなフォーマットでも適当に表示してくれるOutlook Expressでも UTF-8だと一部文字化けします。
この回答への補足
思ったよりも簡単に済ませるものじゃなかったんですね。
# 送信処理や# 申込者への返信メール様式はISO-2022-JPにし、
<meta http-equiv="Content-Type" や&Jcode'convertはutf8にし…
段々複雑になってしまいました。
どれが正しいのか、分からなくなってしまいました。
認識不足です…
No.2
- 回答日時:
メールもUnicodeで送りたいのでしょうか?
それとも、メールは JIS(ISO-2022-JP)のまま送りたいのでしょうか?
メールをUnicdeにするのなら、
・ヘッダの文字コード
> print MAIL &mimeencode("Reply-To: $email")."\n";
> print MAIL &mimeencode("From: $email")."\n";
> print MAIL &mimeencode("Subject: $subject")."\n";
mimeencode は、JIS(ISO-2022-JP)でヘッダをエンコードします。
Unicode(UTF-8)にする場合は、
use Encode; しておいてから、
print MAIL encode("MIME-Header", "Subject: $subject")."\n";
などとします。
・本文の文字コード
> print MAIL "Content-Transfer-Encoding: 7bit\n";
> print MAIL "Content-Type: text/plain\; charset=iso-2022-jp\n\n";
これでは、本文はJIS(ISO-2022-JP)ということになっています。
本文のデータがUTF-8なのでしたら、ヘッダで
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=utf-8
を出力する必要があります。
あるいは、メールをJISで送るなら、
・mimeencode は UTF-8は扱えないので、$subject などは、UTF-8からあらかじめ JIS に変換しておく
・本文は、JISに変換したものを出力
する必要があるでしょう。
この回答への補足
アドバイスをありがとうございます。
HTMLはUTF-8でいきたいのでUnicodeで送るようにそちら様の指摘通り
以下を修正しました。
use Encode;
# 送信処理 ---------------------------------------
print MAIL encode("MIME-Header", "Reply-To: $email")."\n";
print MAIL encode("MIME-Header","From: $email")."\n";
print MAIL encode("MIME-Header","Subject: $subject")."\n";
print MAIL "Content-Transfer-Encoding: 8bit\n";
print MAIL "Content-Type: text/plain\; charset=UTF-8\n\n";
# 申込者への返信メール様式
print MAIL encode("MIME-Header","Reply-To: $main_mail")."\n";
print MAIL encode("MIME-Header","To: $email")."\n";
print MAIL encode("MIME-Header","From: $main_mail")."\n";
print MAIL encode("MIME-Header","Subject: $subject")."\n";
print MAIL "Content-Transfer-Encoding: 8bit\n";
print MAIL "Content-Type: text/plain\; charset=UTF-8\n\n";
※文字コードはUTF=8Nです。UTF=8だとブラウザで文字化けになっています。
結果は
受信したメールのタイトルだけ文字化けになっています。
HTMLの
<input type="hidden" name="subject" value="感想">
「value="感想"」がメールのタイトルになっております。
前回の文字化けは「諢滓Φ」
今回の文字化けは「?????^(3)」でした。
タイトル以外は文字化けはしておりません。
HTMLの文字コードもUTF=8Nです。
No.1
- 回答日時:
あなたはおそらく「送信処理」サブルーチンの中の
&jcode'convert(*contenido,'jis');
までもutf8にいじってしまったのではないでしょうか。
意味もわからずやみくもにいじくらないで、ちゃんとそれぞれの行で何を行っているか理解しながら少しずつ変更していけばどこが悪いかわかるはずなんだけど。
この回答への補足
前回に引き続きアドバイスをありがとうございます。
送信や受信の
&jcode'convert(*contenido,'utf8');を&jcode'convert(*contenido,'jis');
に書き換えましたが、ダメでした。それと一つ一つずつ書き換えても文字化けは直りませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- HTML・CSS <!DOCTYPE html> <html> <head> <meta charset="utf-8 2 2023/01/05 01:04
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
malformed header from script....
-
my $html<<EOMの意味を教えてく...
-
shift-jisからutf8に変換
-
結果を得て自動的にページ移動...
-
テキストエリアにテキストファ...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
文字の横にプルダウンを表示さ...
-
16進の10進変換について
-
セレクトメニューで2つの項目...
-
VBAでPDFのコピーとリネームを...
-
テーブル内でドロップダウンメ...
-
【メモリ不足で落ちる(python)】
-
実行時エラー 3020の対策
-
セレクトボックスの「選択して...
-
vscode 文字化け
-
どちのほうがすきですか?
-
パイソンプログラミング
-
パイソンのクラスのブログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
malformed header from script....
-
結果を得て自動的にページ移動...
-
Perl CGIの中で # を使ってコメ...
-
my $html<<EOMの意味を教えてく...
-
テキストファイルの読み込み
-
Perlでの数字の12桁化
-
shift-jisからutf8に変換
-
どうしてもCookieとCGI・perlの...
-
パソコン → パャRン
-
cgiでのデータ受信
-
CGIから出力される文字が化けて...
-
サムネイルCGI
-
SSI にグローバル変数を渡すこ...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
どちのほうがすきですか?
-
formで特定のinputを送信しない...
-
文字の横にプルダウンを表示さ...
-
16進の10進変換について
-
実行時エラー 3020の対策
おすすめ情報