• ベストアンサー

CGIでメールを送る際に文字化けするのをなんとかしたい・・・

いま、市販の本についていたDM用のCGIをカスタマイズしているのですが、文字化けと改行コードがうまくいきません。ちゃんと送れるメールアドレスもあるのですが、文字化けしてしまう人もいます。 ちなみにサーバーはLINUXです。なんとか本文の文字化けと改行は直りましたが、宛先と件名がどうしても化けてしまいます。お分りになる方がいましたら、ぜひお教え下さい。ちなみに、文字コードはeuc-jpで統一し、改行はLFでやっています。 sendmailに埋め込む部分をどう修正すべきかが分かりません。 参考までにスクリプトの一部を書きます。 # sendMail利用部 埋め込みコマンドの置き換え sub broadCaster { my $i = 0; my $temp = ''; my $letter = ''; for ($i = 0; $i <= $#lists; $i++){ $temp = "$subject###$body"; $temp =~ s/<CGI:mail>/$listDX[$i][0]/g; $temp =~ s/<CGI:name1>/$listDX[$i][1]/g; $temp =~ s/<CGI:name2>/$listDX[$i][2]/g; $temp =~ s/<CGI:admin name>/$adminName/g; $temp =~ s/<CGI:admin mail>/$adminMail/g; $temp =~ s/<CGI:time>/$now/g; ($tempSubject, $tempBody) = split(/###/, $temp); $tempBody =~ s/\r\n/\n/g; $letter = "X-Mailer: U got Mail\n"; $letter .= "To: \"$listDX[$i][1] $listDX[$i][2] 様\" <$listDX[$i][0]>\n"; $letter .= "From: \"$adminName\" <$adminMail>\n"; $letter .= "Subject: $tempSubject\n\n"; $letter .= "$tempBody\n\n"; $letter = jcode::jis($letter);

  • Perl
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
回答No.1

ヘッダーと本文はエンコード形式が違います。 本文はjcodeでエンコードしているようですが ToやらSubjectを正しくMIMEencodeしてますか? ヘッダーはmime_encodeしてみてください。

その他の回答 (2)

  • odacle
  • ベストアンサー率0% (0/2)
回答No.3

ぼけっとしてました、サンプルで使っているのはjcode.plですね多分。Jcode.pmとは別物です。コマンドが入力できる環境(telnetやssh)があるなら $ perl -MJcode してみてください。Can't locate Jcode.pmと出なければ利用できます。(Ctrl+Cでperlの実行を中止してください) use Jcode; をプログラムの先頭の方に書き加えてください。 入っていなければインストールするか(root権限やtelnetまたはsshのコマンド入力環境が必要です)、mimew.plを使うという方法もあります。 mimew.plを利用するにはプログラムと同じディレクトリに配置して require 'mimew.pl'; $tempSubject = mimeencode($tempSubject); のように書けばよいと思います。 Jcode.pm http://search.cpan.org/~dankogai/Jcode-2.00/ mimew.pl http://itbtech.itboost.co.jp/perl/mimew.pl

  • odacle
  • ベストアンサー率0% (0/2)
回答No.2

エンベロープ(ヘッダ)の部分は =?文字コードの宣言?B?宣言された文字列をBase64にエンコードしたもの? で、全体で75文字以上になる場合は改行を入れる。という形式の取り決めがあります。(参照URLのRFC2047を見てください) 例.) =?ISO-2022-JP?B?GyRCRnxLXDhsGyhC?= ということをふまえてなければいけませんが、Jcode.pmにはそのための関数が用意されています。jcode::jisを使っているのですでにuse Jcode;は宣言されていると思いますが一応確認してください。 $tempSubject = jcode->($tempSubject)->mime_encode; を$letterより前に入れてください。 あて先の名前はおそらくは$listDX[$i][1..2]あたりに入っているかと思いますが、そこも必要に応じてmime_encodeしてあげてください。 ただし、mail@exsample.comのようなメールアドレスの部分はmime_encode*しないで*ください。

参考URL:
http://www.asahi-net.or.jp/~bd9y-ktu/dtd_f/rfc_f/rfc2047j.html

関連するQ&A

  • CGIフォームから飛ばすメールでチルダ文字化け

    フリーCGIで、なんとか、メール送信まで成功したのですが、 一部の文字に文字化けが発生しました。「~」「(株)」などです。 文字化けを確認したのは、アウトルックエクスプレスとサンダーバードです。 が、他のメールクライアントでも文字化けはしていると思います。 1.チルダ(全角)等の文字化け("~ ∥ - ¢ £ ¬ ") 2.機種依存文字が含まれていた場合の対応 CGIに関してはまったくの素人ですので、 専門用語はわからないのですが、 解決方法をご教授いただけると幸いです。 下記が実際に使用しているCGIプログラムになります。 よろしくお願いいたします。 use Jcode; require './mimew.pl'; require './cgi-lib.pl'; $sendmail = '/usr/sbin/sendmail'; # Main処理 $mustflag = 0; $csvflag = 0; $body = ""; $addr = $ENV{'REMOTE_ADDR'}; $host = $ENV{'REMOTE_HOST'}; if ($host eq "" || $host eq $addr) { $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2) || $addr; } my %input; &ReadParse(\%input); @names = keys %input; @names = sort @names; $config = $input{'config'}; require $config; if ($must ne '') { $mustflag = 1; @mustitem = split(/,/, $must); } &readData; if ($input{'action'} eq 'kakunin') { &kakunin; } elsif ($input{'action'} eq 'send') { if ($csvname ne '') { $csvflag = 1; } &crecsv; &sendMail; print "Location: $thanksURL\n\n"; exit; } #--- Read Data --- sub readData { $hidden = ""; foreach $id(@names) { if (($id ne 'config') and ($id ne 'hidden') and ($id ne 'action') and ($id ne 'submit')) { if ($mustflag) { foreach $mt(@mustitem) { if (($id eq $mt) and ($input{$id} eq '')) { print "Location: $errorURL\n\n"; exit; } } } $input{$id} =~ s/\x0D\x0A/\n/g; $input{$id} =~ s/\x0D/\n/g; $input{$id} =~ s/\x0A/\n/g; $input{$id} =~ s/\0/ /g; if ($input{'action'} eq 'kakunin') { $input{$id} =~ s/&/&amp;/g; $input{$id} =~ s/</&lt;/g; $input{$id} =~ s/>/&gt;/g; $input{$id} =~ s/>/&gt;/g; $input{$id} =~ s/"/&quot;/g; #" $hidden .= "<input type=\"hidden\" name=\"$id\" value=\"$input{$id}\">\n"; $input{$id} =~ s/\n/<br>/g; } elsif ($input{'action'} eq 'send') { $input{$id} =~ s/&amp;/&/g; $input{$id} =~ s/&lt;/</g; $input{$id} =~ s/&gt;/>/g; $input{$id} =~ s/&gt;/>/g; $input{$id} =~ s/&quot;/"/g; #" push (@data, $input{$id}); $body .= "[$id]\n$input{$id}\n"; } } } } #--- Confirm Data --- sub kakunin { if (open(IN, $kakunin)){ local $/ = undef; $src = <IN>; close(IN); } else{ &error("$kakuninがありません。"); } print "Content-type: text/html\n\n"; foreach $item(@names) { $str = "<!--%%".$item."%%-->"; $src =~ s/$str/$input{$item}/; } $hidden .= "<input type=\"hidden\" name=\"config\" value=\"$input{'config'}\">\n"; $src =~ s/<!--%%hidden%%-->/$hidden/; print "$src\n"; } #--- Create CSV File --- sub crecsv{ push (@data, $host); push (@data, $addr); if ($csvflag) { $flock = 'lock/'.$csvname; &filelock; $line = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @data; #" open(FH, ">>$csvname") || &error("can't open $csvname:$!"); print FH $line, "\n"; close(FH); rmdir($flock); } } #--- send mail --- sub sendMail{ $body .= "[host]\n$host\n"; $body .= "[IP Address]\n$addr\n"; Jcode::convert(\$subject, 'jis'); $header .= "To: $mailto\n"; $header .= "Cc: $mailcc\n"; $header .= "Bcc: $mailbcc\n"; $header .= "From: $mailfrom\n"; $header .= "Subject: $subject\n\n"; Jcode::convert(\$body, 'utf8'); open(SENDMAIL, "|$sendmail -t -oi") || &error("メール送信に失敗しました。"); print SENDMAIL &mimeencode($header); print SENDMAIL "$body\n"; close(SENDMAIL); } #--- Error --- sub error{ print "Content-type: text/html\n\n"; local($msg) = @_; print &HtmlTop("error"); print $msg; print &HtmlBot(); exit(0); } #--- File Lock --- sub filelock { $SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "sigexit"; for ($i = 0; $i < 6; $i++) { if (mkdir("$flock", 0755)) { last; } elsif ($i == 1) { ($mtime) = (stat($flock))[9]; if ($mtime < time() - 600) { rmdir($flock); } } elsif ($i < 6) { sleep(1); } else { &error("File Lock Error"); } } } sub sigexit { rmdir($flock); exit(0); }

    • ベストアンサー
    • CGI
  • CGIフォーム無改行で途中から文字化け

    CGI(Perl)でsendmailを使ったメール送信ソフトを製作したのですが 改行のない中央文を入力すると途中(500字位)から文字化けしてしまいます。 対処方法を教えてください。改行が入ると問題ないです。

    • 締切済み
    • CGI
  • ruby-cgi メールは受信できるのですが文字化けしてしまいます。

    下記のように記載しましたが、日本語のメール本文が文字化けしてしまいます。 nkfあたりが怪しいと思うのですが、お手上げです。 よろしくお願いします。 #!/usr/bin/ruby -Ke require 'nkf' require 'cgi' require 'net/smtp' def sendmail(server, subject, body, sender, recipient) mail = '' # メールヘッダを作る mail << 'To: ' + recipient + "\n" mail << 'From: ' + sender + "\n" mail << 'Subject: ' + subject + "\n" mail << 'Date: ' + Time.now.strftime('%a, %d %b %Y %H:%M:%S %z') + "\n" mail << "\n" # メールの本文 mail << body # 送信! Net::SMTP.start(server, 25) {|smtp| smtp.send_mail(mail, sender, recipient) } end cgi = CGI.new output = '' output << "ああ" + ":\n" output << ' ' + "いいい".gsub(/\n/, "\n ") + "\n" NKF.nkf('-j -m0', output) sendmail('mailserver@**.co.jp', 'cgi sendmail', output, 'from@mail.co.jp', 'to@mail.co.jp'){|body| NKF.nkf('-e -m0', body) } cgi.out('type' => 'text/plain') { output }

    • ベストアンサー
    • CGI
  • CGIフォームから飛ばすメールがOEで文字化け

    以前自社で使われていたフリーのCGIをそのままサイトのリニューアルで使用しているのですが、UTF-8でサイトを作成すると、CGIフォームの文字化けが発生して、いろいろ調べた結果、下記のコードで、解決しました。 しかし・・・・・。まさかの「Outlook Express」文字化けが発生しておりました・・・。 私のPCはwindows8のため、確認ができず本当に困っています… コードは下記になるのですが、「Outlook Express」に対応させることは可能でしょうか? 上司のPCに「Outlook Express」が入っているため、確認は最小限に抑えなければいけません(汗) ちなみにCGIは全くの素人です。すみません・・・ use Jcode; require './mimew.pl'; require './cgi-lib.pl'; $sendmail = '/usr/sbin/sendmail'; # Main処理 $mustflag = 0; $csvflag = 0; $body = ""; $addr = $ENV{'REMOTE_ADDR'}; $host = $ENV{'REMOTE_HOST'}; if ($host eq "" || $host eq $addr) { $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2) || $addr; } my %input; &ReadParse(\%input); @names = keys %input; @names = sort @names; $config = $input{'config'}; require $config; if ($must ne '') { $mustflag = 1; @mustitem = split(/,/, $must); } &readData; if ($input{'action'} eq 'kakunin') { &kakunin; } elsif ($input{'action'} eq 'send') { if ($csvname ne '') { $csvflag = 1; } &crecsv; &sendMail; print "Location: $thanksURL\n\n"; exit; } #--- Read Data --- sub readData { $hidden = ""; foreach $id(@names) { if (($id ne 'config') and ($id ne 'hidden') and ($id ne 'action') and ($id ne 'submit')) { if ($mustflag) { foreach $mt(@mustitem) { if (($id eq $mt) and ($input{$id} eq '')) { print "Location: $errorURL\n\n"; exit; } } } $input{$id} =~ s/\x0D\x0A/\n/g; $input{$id} =~ s/\x0D/\n/g; $input{$id} =~ s/\x0A/\n/g; $input{$id} =~ s/\0/ /g; if ($input{'action'} eq 'kakunin') { $input{$id} =~ s/&/&amp;/g; $input{$id} =~ s/</&lt;/g; $input{$id} =~ s/>/&gt;/g; $input{$id} =~ s/>/&gt;/g; $input{$id} =~ s/"/&quot;/g; #" $hidden .= "<input type=\"hidden\" name=\"$id\" value=\"$input{$id}\">\n"; $input{$id} =~ s/\n/<br>/g; } elsif ($input{'action'} eq 'send') { $input{$id} =~ s/&amp;/&/g; $input{$id} =~ s/&lt;/</g; $input{$id} =~ s/&gt;/>/g; $input{$id} =~ s/&gt;/>/g; $input{$id} =~ s/&quot;/"/g; #" push (@data, $input{$id}); $body .= "[$id]\n$input{$id}\n"; } } } } #--- Confirm Data --- sub kakunin { if (open(IN, $kakunin)){ local $/ = undef; $src = <IN>; close(IN); } else{ &error("$kakuninがありません。"); } print "Content-type: text/html\n\n"; foreach $item(@names) { $str = "<!--%%".$item."%%-->"; $src =~ s/$str/$input{$item}/; } $hidden .= "<input type=\"hidden\" name=\"config\" value=\"$input{'config'}\">\n"; $src =~ s/<!--%%hidden%%-->/$hidden/; print "$src\n"; } #--- Create CSV File --- sub crecsv{ push (@data, $host); push (@data, $addr); if ($csvflag) { $flock = 'lock/'.$csvname; &filelock; $line = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @data; #" open(FH, ">>$csvname") || &error("can't open $csvname:$!"); print FH $line, "\n"; close(FH); rmdir($flock); } } #--- send mail --- sub sendMail{ $body .= "[host]\n$host\n"; $body .= "[IP Address]\n$addr\n"; Jcode::convert(\$subject, 'jis'); $header .= "To: $mailto\n"; $header .= "Cc: $mailcc\n"; $header .= "Bcc: $mailbcc\n"; $header .= "From: $mailfrom\n"; $header .= "Subject: $subject\n\n"; Jcode::convert(\$body, 'utf8'); open(SENDMAIL, "|$sendmail -t -oi") || &error("メール送信に失敗しました。"); print SENDMAIL &mimeencode($header); print SENDMAIL "$body\n"; close(SENDMAIL); } #--- Error --- sub error{ print "Content-type: text/html\n\n"; local($msg) = @_; print &HtmlTop("error"); print $msg; print &HtmlBot(); exit(0); } #--- File Lock --- sub filelock { $SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "sigexit"; for ($i = 0; $i < 6; $i++) { if (mkdir("$flock", 0755)) { last; } elsif ($i == 1) { ($mtime) = (stat($flock))[9]; if ($mtime < time() - 600) { rmdir($flock); } } elsif ($i < 6) { sleep(1); } else { &error("File Lock Error"); } } } sub sigexit { rmdir($flock); exit(0); }

    • ベストアンサー
    • CGI
  • メイルフォームの本文が文字化け

    サーバーを移転してからある特定のソース部分だけ不具合が出ました。 ユーザーがログイン後特定のユーザーにアドレスを公開せずに、メッセージをおくり、その内容がユーザのアドレスに受信するというものなのですが、 その受信するメイルが文字化けしてしまいます。 その他にサイト上からおなじCGIファイルを利用して、管理者などにおくるメイルは正常に機能しています。 ■不具合が出ている部分のソースです。 if (!open(OUT,"| $SENDMAIL -t")) print OUT "Reply-To: $ADMIN\n"; print OUT "Errors-To: $ADMIN\n"; print OUT "To: $MAIL_TO\n"; if ($BCC == 1){ print OUT "Bcc: $ADMIN\n"; } print OUT "From: $ADMIN\n"; &jis("Subject: $SUBJECT"); print OUT "$msg\n"; print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT 'Content-Type: text/plain; charset=iso-2022-jp' . "\n\n"; &jis("$NAME_FROM:$FORM{'MSG'}"); print OUT "$msg\n"; &jis("▽返事はココから"); print OUT "$msg\n"; &jis("$bbs_cgi1?M=H&T=$ID_FROM&I=$ID_TO&PASS=$PASS_TO"); print OUT "$msg\n"; close(OUT); } print "Content-type: text/html\n\n"; print "<html><head><title>$TITLE</title></head><body>■送信完了<HR> $NAME_FROMさんより$NAME_TOさんへメール送信完了しました。<hr>\n"; print "[<a href=$menu_cgi?mode=menu&I=$MYID&PASS=$MYPASS>メニューに戻る</a>]<br>\n"; print "</body></html>\n"; exit; } ■文字化けは aika!' (Basd "&JV;v$O%3%3$+$i (B ような感じです。 かなりいろいろ探してみたのですが、だめなので ここに投稿しました。 わかる方いらっしゃいましたら、どうぞご回答いただければと思います。よろしくお願いします。

    • 締切済み
    • CGI
  • CGIの文字化けについて

    CGI初心者ですが、本とネットを調べてメールフォームを作成しています。 テストで作成していた時は何故かうまくいったのですが、 本番用サイトにアップしテストしてみると、自動返信メールが文字化けするようになってしまいました。 送信先は会社側がgmail、お客様側がスマホ(docomo)として自分のスマホに送っていますが、 gmailもスマホも本文のみが文字化けしています。 ネット上でも調べて、件名の文字化けは治すことが出来たのですが、本文がどうしても文字化けしてしまい、治せません。。。 HTMLの文字コードはUTF-8で、CGIもUTF-8Nで保存しています。 ほぼ本を見てそのまま作成し、修正部分だけネットで調べて追記していく、というような感じで 酷い内容のコードになってると思いますが。。 原因がわかる方がいらっしゃいましたら、是非ご教示頂ければと思っています。 また、こんな私に参考になるサイトがあれば教えて頂きたいです。 不明点は出来るだけ補足するつもりです。 宜しくお願いします。 どうかお助け下さい! ------------------------------------------------- 以下がコードです。 #!/usr/local/bin/perl #setting require './lib/cgi-lib.pl'; use lib './lib'; use Jcode; use CGI; use utf8; use Encode; #フォームから入力データ読込 &ReadParse(*in); $name = "$in{'name'}"; $subject = "$in{'subject'}"; $address = "$in{'address'}"; $at = '@'; $domain ="$in{'domain'}"; #★メール送信先★会社側メールアドレス $to = 'kaisya@gmail.com'; #★メール送信者名★会社名 $fromname='株式会社かいしゃ'; #★メール送信者表示アドレス★ $from = 'kaisya2@kaisya2.com'; #★メール送信用タイトル★ $fromsubject = 'WEB会員登録のお申込みありがとうございました'; #★メール送信用内容★ $from_msg = <<END_OF_DATA; WEB会員登録のお申込み、ありがとうございました。 以下のURLへアクセスし、ご登録を進めて下さい。 http://www.kaisya.xxxx また、このメールに心当たりのない方は、このメールは削除して頂きますようお願い致します。 ☆---------------------------------☆ 株式会社かいしゃ HP:http://www.kaisya.xxxx MAIL:kaisya2@kaisya2.com TEL:00-9999-9999 FAX:00-9999-8888 ☆---------------------------------☆ END_OF_DATA $nstatus = 0; $mstatus = 0; $dstatus = 0; #process before send $mailName = Jcode::convert( $name , "utf8", "utf8" ); $mailSubject = Jcode::convert( $subject , "utf8", "utf8" ); $soushin_name = Jcode::convert( $fromname , "utf8", "utf8" ); $from_msg = Jcode::convert( $from_msg , "utf8", "utf8" ); #未入力check if($address eq "" ){ $nstatus = 1; } #mailaddress check if($address =~ /[^a-z0-9_\-\.]/ ){ $mstatus = 1; } #domain check if($domain =~ /^$/ ){ $dstatus =1; } if($nstatus == 1 or $mstatus == 1 or $dstatus == 1){ &mailerror; } #mailaddress $mailaddress = $address . $at .$domain; #sendmail #会社側にメールを送る $soushin_name = encode('MIME-Header-ISO_2022_JP', $soushin_name); open(MAIL, "| /usr/sbin/sendmail -t"); print MAIL "To: $to\n"; print MAIL "From:$soushin_name<$from>\n"; print MAIL "subject: $mailSubject\n"; print MAIL "Content-Type: text/plain; charset=\"iso-2022-jp\"\n\n"; print MAIL "名前: $mailName\n"; print MAIL "e-mail: $mailaddress\n"; close(MAIL); #sendmail2 #送信者側にメールを送る open(MAIL, "| /usr/sbin/sendmail -t"); print MAIL "To: $mailaddress\n"; print MAIL "From:$soushin_name<$from>\n"; print MAIL "subject: $mailSubject\n"; print MAIL "Content-Type: text/plain; charset=\"iso-2022-jp\"\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "{$from_msg}\n"; print MAIL "-------------------------------------\n"; print MAIL "以下の内容で送信されました\n"; print MAIL "名前: $mailName\n"; print MAIL "e-mail: $mailaddress\n"; close(MAIL); #display print "Content-type: text/html;charset=utf-8\n\n"; print "<html>\n"; print "<title>send result</title>\n"; print "<h1>send mail</h1><hr />\n"; print "以下のメールを送信しました<br />"; print "Name: $name<br />\n"; print "email: $mailaddress<br />\n"; print "</body></html>\n"; #サブルーチン メールアドレスにエラー sub mailerror{ print "Content-type: text/html;charset=utf-8\n\n"; print "<html>\n"; print "<title>mailaddress error</title>\n"; print "<body>\n"; print "<h1>send mail</h1><hr />\n"; if($nstatus == 1){ print "メールアドレスが入力されていません。<br />\n"; print "$nstatus<br />\n"; } if($mstatus == 1){ print "メールアドレスを正しく入力して下さい。<br />\n"; print "$mstatus<br />\n"; } if($dstatus == 1){ print "ドメインを選択して下さい。<br />\n"; print "$dstatus<br />\n"; } print "<a href=\"javascript: history.back()\">戻る</a><br />\n"; print "</body></html>\n"; exit; } exit;

    • ベストアンサー
    • CGI
  • 文字化け

    下記のようなcgiスクリプトがあり、test1.cgi から リンクの test2.cgiを呼ぶと 「リンドウ」が文字化けしてしまいます。 文字化けしないようにするには、どうしたらいいでしょうか。 Perl cgi 初心者です。 --------test1.cgi----------------------------------------- #!/usr/bin/perl print "Content-Type: text/html; charset=EUC-JP\n\n"; $name="リンドウ"; print "name=$name<br>"; print "<a href=\"test2.cgi?aaa,${name},bbb\">test2.cgi</a>\n"; ---------test2.cgi------------------------------------------------- #!/usr/bin/perl print "Content-type: text/html; charset=EUC_JP\n\n"; $query = $ENV{'QUERY_STRING'}; print "query=$query\n";

    • ベストアンサー
    • CGI
  • CGIメールフォームのメールが文字化けしてしまいます。

    こんにちは。 CGIから自動返信されるメールが 人によって文字化けしてしまうそうです。 私の場合は、文字化けしないのですが・・・。 誰も文字化けしないような、自動返信メールを作りたいのですが、 CGIのどこをいじればよいかわかりません。 よかったら、教えてください。お願いします。

    • 締切済み
    • CGI
  • cgiでの文字化け

    <TD bgcolor="#ffffff" align="center">¥36000<BR>個数 <SELECT name="商品名:白雲"> <OPTION value="" selected>--</OPTION> <OPTION value="1"> 1</OPTION> <OPTION value="2"> 2</OPTION> </SELECT></TD> 上記記述がHTML内にあるのですが、これをmail.cgiを使って送信すると 確認画面や送信されたメールで文字化けをしてしまいます。 文字化けするのは「雲」という文字で、雲の文字を空などにしても文字化けしません。 他の項目もあるのですが、こちらも文字化けしません。 ちなみに、textエリア内に書き込まれた雲と言う文字も文字化けしません。 なぜ、雲という文字だけ文字化けしてしまうのでしょうか? どうにかして雲を表示させる方法はありますか?

    • ベストアンサー
    • CGI
  • perlのcgiが文字化けします。

    perlを使ったcgiを作ろうと思い、こんなプログラムを書いてみたのですが、htmlのタグに囲まれた部分の日本語が文字化けしてしましいます。ファイルの文字列は上手く表示できるのですが… どうすればいいでしょうか。 文字コード判別をしてみたところ、このプログラム自体はShift-JISで書かれているようです。 開いているファイルはutf-8のようです。 #!/usr/bin/perl #ヘッダの表示 print "Content-Type: text/html; charset=utf-8\n\n"; print "<html>\n"; print "<head><title>掲示板</title></head>\n";#これが文字化け print "<body>\n"; print "<input type=\"text\" name=\"mail\" size=\"20\" value=\"\"><br>\n"; print "メッセージ<br>\n";#これも文字化け my $File = 'party0339.html'; if (-e $File) { #####@ファイルを開く…上でファイルが存在してることを確認して開けない場合はエラーメッセージ open(FF,"<:utf8",$File) or die "ファイル:$File を開けない $! \n"; my @FILE = <FF>; close (FF); ####@読み込んだデータを$Dataに格納する foreach (@FILE) { $Data = $_; print "$Data<br>\n"; } } #フッタの表示 print "</body>\n"; print "</html>\n"; exit (); 対策や原因などを教えてくださるとありがたいです。よろしくお願いします。

専門家に質問してみよう