CGI-BBS > 情報収集 > フォームメール > UTF-8で外国語のデータを送信すると文字化けしてしまう。


カレッヂ
カレッヂ


質問者 COCO  投稿日 2004/3/20(土) 14:42:30
フォームメールのスクリプトを使って、フォームから入力された外国語のデータをメールで
受信したいと思っているのですが、送られてきたメールを見ると文字化けしてしまいます。
初心者の為、どこに問題があるのかが良く判りません。

<今までに行った事>
・フォームメールのスクリプトをsjisのままで設定、アップして動作確認。
・確認の取れたものをUTF-8で保存。
・jcode.pmのインストール
・スクリプトにJcodeのパスを追加
・『require './jcode.pl';』を削除し、『use Jcode;(改行) Jcode->new($str)->h2z->utf8;』を記述。
・■設置日本語コード『$convert = 'sjis';』を『$convert = 'utf8';』に変更。
・『&jcode'convert(*●●●,$convert);』を『&Jcode'convert(\$●●●,$convert);』に変更。

<現在の状況>
フォームに必要事項を記入し送信ボタンを押すと、確認画面は出てくる。
その時点での文字化けは、スペイン語以外は無し。
(スペイン語についてはある特定の文字が漢字になるが、いずれも化ける文字は決まっている。)
送信されてきたメールを見ると、漢字・かな・記号などが混在し、アルファベット以外は読めない。
メールのエンコードは『日本語(自動選択)』になっており、『UTF-8』に直しても記号の羅列になる。

<考えられる問題点>
sub send_mix の中にある
  >print OUT "Content-Transfer-Encoding: 7bit\n";
 >print OUT 'Content-Type: text/plain; charset=iso-2022-jp' . "\n\n";
を変えればどうにかなるのではと思い、色々試してみましたが上手くいきません。

どのように記述すれば文字化けせずに送れるのか、また他に考えられる問題があれば
解決方法を教えて下さい。宜しくお願いします。




プロバイダ参照:http://w3lab.net/ct/index.html
サーバのOS:UNIXサーバ
パソコンのOS:Win95系
エディタ:EmEditor
FTPソフト:FFFTP,NextFTP
サーバ移転:していない
改造:している 改造前正常動作
CGI習熟度:middle

回答者 sim  [削除]  投稿日 2004/3/20(土) 21:59:17
Content-Type: text/html;charset="utf-8"
Content-Transfer-Encoding: quoted-printable

に設定したらいけるかも?知れません。
やったことないのでなんとも言えませんが。

jcode.pmはUTF-8に対応してなかった気がします。

Unicode::Japaneseというモジュールがあるようなので
こちらを調べてみては?と思います。
回答者 sim  [削除]  投稿日 2004/3/20(土) 22:13:22
すいません。utf8で使えるようになってるみたいです。
嘘ついてごめんなさい。
質問者 COCO  [削除]  投稿日 2004/3/20(土) 23:51:48
レスありがとうございます。ご指摘頂いた

 >print OUT "Content-Transfer-Encoding: quoted-printable\n";
 >print OUT 'Content-Type: text/plain; charset="utf-8"' . "\n\n";
と、元の記述に合わせて
 >print OUT "Content-Transfer-Encoding: quoted-printable\n";
 >print OUT 'Content-Type: text/plain; charset=utf-8' . "\n\n";

UTF-8で送られてきたメールのプロパティに書かれている
 >Print OUT "Content-Transfer-Encoding: 8bit\n";
 >print OUT 'Content-Type: text/plain; charset=utf-8' . "\n\n";

を試してみましたが、やはりり状況は同じです。
何か他に考えられる原因があるのでしょうか…(T_T)。
回答者 sim  [削除]  投稿日 2004/3/22(月) 00:15:55
一応下記のコードでやったところ、OEはUTF8として認識してくれました。
input側の文字コードがSJISで動作確認しました。

use Jcode;

$title = "ここがタイトルです。";
$body=$_POST['comment'];

$title = Jcode->new($title)->h2z->utf8;
$body = Jcode->new($body)->h2z->utf8;

$mailadd_from = 'メールアドレス';
$mailadd_to = 'メールアドレス';

open(MAIL,"| $sendmail -t");
print MAIL "To: $mailadd_to\n";
print MAIL "From: $mailadd_from\n";
print MAIL "Subject: $title\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-Type: text/html;charset=\"utf-8\"\n";
print MAIL "Content-Transfer-Encoding: quoted-printable\n\n";
print MAIL "$body\n";
close(MAIL);
質問者 COCO  [削除]  投稿日 2004/3/22(月) 04:44:57
sim様 > お手数をかけて頂きまして、ありがとうございますm(_ _)m

お陰さまで、UTF-8形式のメールが受信できるようになりました。
メモを取らずに色々やってしまったので、何が原因で出来なかったのかはっきり判らないのですが、
前に試した時と違うのは、『&Jcode'convert(\$○○,$convert);』を消したことと
『print OUT "MIME-Version: 1.0\n";』(フォームメールのスクリプトでは MAILではなく
OUTが使われていたのでOUTにしました) が無かったので付け加えたこと、の2点です。
(おまけで、上記に書いた確認画面でのスペイン語の文字化けがけなくなりました。
…これはconvertの記述を削除したお陰なのでしょうかね…(^_^;)。)

ただ、やはり送られてきたメールは文字化けしており、そのメールをUTF-8からJISに直すと
元のメールと同じ化け方をしています。
$body = Jcode->new($body)->h2z->utf8;
が問題の鍵になってるのかなぁと思い、スクリプトを一生懸命見たのですが、
どれが$bodyにあたるのか良く判りません。
一番頭に書き加えた
use Jcode;
Jcode->new($str)->h2z->utf8;
とは別に、記述が必要ですか?それとも、この記述だけで同じ役割を果たせているのでしょうか?


その後色々調べてみたところ、UTF-8からBase64へのエンコードが必要との情報を得ました。
試してみたいと思うのですが…どのようにしたら良いのか判らないのです…(T_T)
教えて下さい〜。
回答者 sim  [削除]  投稿日 2004/3/22(月) 19:32:45
まずは入力された文字コードを判別するべきかもしれません。
スペイン語はスペイン語の文字コードを使用するためSJISではないと思います。
また、多国語対応にする場合は厳密に文字コードを取得する必要が出てくるかと思います。
文字コード判別のモジュールを見つけてしまうのが楽かと思います。

簡単なのはHPをUTF-8で作成してしまうことかと。
UTF8がとこまで対応されているのか分からないので、かなりいい加減な提案ですが。。
スペイン語からUTF8に変換するモジュールもあるかと思います。
この辺はがんばって調べてみてください。

質問者 COCO  [削除]  投稿日 2004/3/23(火) 02:18:59
HPはスペイン語だけではなく他に7ヶ国語を扱いたいので、UTF-8で作成しています。
一応その8カ国後はUTF-8でカバー出来るようなのですが、メール送信の際にUTF-8から
Base64へのコンバートが必要なのだそうです。

その後、mimew.plというモジュールをダウンロードしてみました。
紹介されているページを色々読んでみたのですが、素人には判るような判らないような…(^_^;)。
とにかく試してみないことには質問のしようもありませんので、頑張ってみます。
何か問題があればまた書き込みに来ますので、色々教えて下さいm(_ _)m

返信(回答)する

 


Web裏技