CGI-BBS > CGI > Perl > メールのリンクをクリックすると文字化け


カレッヂ
カレッヂ


質問者 tnpn  投稿日 4/18(木) 11:51:34
質問させて下さい。

CGIでHTMLを表示させる場合にリンクをクリックしたらメールが出てくる...。という
ようなモノを作りました。

作成したのですが、リンクをクリックするとメールちゃんと出てくるのですが、どうしても件名の個所が文字化けしてしまいます。
ブラウザでステータスバーで確認すると、文字化けをしていなくてちゃんと表示されています。

ブラウザのエンコードは自動設定になっているし、CGIがおかしいのか原因がよく分かりません。
ちなみにブラウザはIE5.5を使用しています。
分かる方いましたら、よろしくお願い致します。

下記のように書きました。
$atcl_subject =~ s/^Re:\s*// ;
$atcl_subject =~ s/^RE:\s*// ;
$atcl_subject="Re: $atcl_subject" ;
print "投稿者:<A
HREF=\"mailto:$atcl_email?subject=$atcl_subject\">$atcl_from</A>\n" ;

回答者 今夜はやすだ  [削除]  投稿日 4/18(木) 12:46:14
RFC1522で、Mailのヘッダーに日本語を使うには、iso-2022-jpにし、
それをbase64でエンコードして =?ISO-2022-JP?B? と ?= で括れとありますんで、
そうしましょう。

その際、もちろん、jcode.plかJcode.pmとMIME::Base64.pmかmimew.plを必要とします。

ちなみに、Jcode.pm+MIME::Base64.pmの組み合わせでは、

use Jcode;
use MIME::Base64;

my $encoded='=?ISO-2022-JP?B?'.MIME::Base64::encode_base64(jcode($target,&Jcode::getcode($target))->iso_2022_jp,'').'?=';

てな感じになります。
回答者 今夜はやすだ  [削除]  投稿日 4/18(木) 23:46:14
decodeの場合でしたね。すみません。

メールを取り込んで、MIMEエンコードされたSubjectを直して表示が目標ですよね。

$targetには、Subject行が入っているとして、

use Jcode;
my $jconv=Jcode->new($target);
my $decoded=$jconv->mime_decode->sjis;

で$decodedに日本語sjisの文字列に変換されて出てきます。

上で、use MIME::Base64;とありますが、JcodeでMIME::Base64を組み込んでいるんでなしでもいいです。
質問者 tnpn  [削除]  投稿日 4/24(水) 14:56:22
ありがとうございました。

EUCだと文字化けって直らないんですかね??
convertしても駄目でした...。

HTMLをS-JISで表示させるとOKでした。
日本語の入った件名つきのメールのリンクはS-JISで表示するようにします。

修正する糸口が見つけられて助かりました。

このページは終了したので返信(回答)は書きこめません

Web裏技