ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

超初心者向けCGI講座コミュのUTF-8の多言語対応のスクリプトに変更したい

  • mixiチェック
  • このエントリーをはてなブックマークに追加
 Yomiメーラー(​http://yomi.pekori.to/yomi-mailer.html)​というフリーウェアを利用して、UTF-8の多言語対応のスクリプトに変更しております。

 当方、プログラミングの知識がまったくなく、Perlをマニュアル通りに設置するだけの技能しかないので、「中文電脳/UTF-8で簡単多言語CGI」というWebページを参考にUTF-8化しようとしております(※上記サイトのURLは長くてうまく記述できそうもないので、Googleで検索してみてください)。

 上記「中文電脳/UTF-8で簡単多言語CGI」の指示に従ってそのフリーウェアをUTF-8対応にしていきましたが、どうしても私の猫の額のような知識では分からない箇所が出てきました。

 おそらく、この「mimew.pl」というファイルを使わずに、適切なエンコード処理をすればよいのだと思いますが。
 以下、2つのリソースを紹介して頂いたのですが、このコードをどこにどのように挿入すればよいのかも分かりません。
http://perldoc.jp/docs/modules/MIME-Base64-2.12/Base64.pod​
http://perldoc.jp/docs/modules/MIME-Base64-2.12/QuotedPrint.pod

 一応、このプログラムの本体のスクリプトもアップロードしておきます。
http://cgi.www5b.biglobe.ne.jp/~xpress/test-2/img-box/img20080806211322.txt

 このソースの163行目から172行目をあたりをなんとかしなければいけないと思うのですが、全く分かりません。

 テキストファイルとしてこの「mimew.pl」を参考用に、以下の場所にアップロードしてみました。
http://cgi.www5b.biglobe.ne.jp/~xpress/test-2/img-box/img20080811042139.txt



 なにとぞ、なにとぞ、ご教授頂ければ幸いですm(__)m宜しくお願いします。


コメント(15)

追記です。

私の目的は、UTF8に対応したメーラーの設置、それと複数のフォームを一つのスクリプトで作成できるものを、ということでこのYomiメーラー(​http://yomi.pekori.to/yomi-mailer.html)​といものをセレクトしましたが、以下のようなモノもありました。

http://pgd.jp/cgiscript.html

 ただこのスクリプトは、フォームテンプレートを直に作成してアップロードする必要があります。
 私の場合、メールフォームの設置はFTPも知らない素人にやってもらうことになるので、このスクリプトだと要件に一致しません。以上蛇足ですが、宜しくお願い致します。
ただ表示をUTF-8にしたいだけで、英語と日本語以外の言語のメール送信はしないのか、英語と日本語以外の言語もメール送信できるようにしたいのかがはっきりわからないのですが、多言語対応ということはUTF-8メール送信ということでいいのでしょうか。

一応Yomi Mailerを英語と日本語以外の言語も送信(UTF-8メール送信)できるように改造をしてみたのですが。

UTF-8メール送信で表示もUTF-8でいいならjcode.plいらないですし、Jcode.pmなどに置き換える必要もないので根本的には間違ってないと思います。
perl v5.6.1で試しましたが、Jcode.pm使わずできました。
勿論、ソースはperl v5.8.8でのテスト時と全く同じままです。
※敬称が抜けていたので書き直しました。

>5 想羅さん
利用できるのはお使いのサーバに Jcode.pm がインストールされているから
だと思いますよ。
Jcode.pm がデフォルトで準備されるようになったのは 5.8.0 からですが、
CPAN 等でインストールしておけばそれ以前のバージョンでも利用できます。
>>SAY様、想羅様
連休中、お休みのところ皆様、わざわざありがとうございます。
ご指摘、ありがとうございます。


メールは、日本語と英文以外の可能性も、想定しております。

サーバーのPerlのバージョンについて書き忘れておりました、「perl-5.8.0-88.7」です。


Jcode.pm等も試してはみたのですが、メールが文字化けしてしまいました(韓国語、中国語など)。


とりあえず、
?ヘッダにUTF-8指定メタタグ設定
→ $HTTP_HEADER_CONTENT_TYPE = "Content-type: text/html; charset=Shift_JIS\n\n";   を
  $HTTP_HEADER_CONTENT_TYPE = "Content-type: text/html; charset=utf-8\n\n";   に修正する。

?jcode.plによる日本語処理部分を無効にする
→ require './ym_lib/jcode.pl'; を
  #require './ym_lib/jcode.pl';  に修正する(#追加)

→ &jcode'convert(*honbun,"jis");   を
  #&jcode'convert(*honbun,"jis");    に修正する(#追加)

→ &jcode::convert(\$value,'sjis');    を
   #&jcode::convert(\$value,'sjis');      に修正する(#追加)

→ &jcode::convert(\$name,'sjis');   を
  #&jcode::convert(\$name,'sjis');       に修正する(#追加)

 のみ、やってみました。もちろんこれだけだと送信されたメールが文字化けしてしまいます(Hotmailだと文字化けせずに受け取れることは受け取れますが、問題のあるメールとして処理されてしまいます)。

 そのほかの対応策、ありましたら宜しくお願い致します。
>>みゃさん
Jcode.pmはインストールされていません。
自宅のマシンにテスト用に用意した環境なので確実です。
まずソース自体にJcode.pmを使う記述をしていません。
用意する必要がないのではなく、本当に使っていません。

>>ニャー博士さん
Perl UTF-8 メール
でぐっぐってみてください。
私が参考にしたページがでてくるはずです。

UTF-8でメール送信するにはBase64でサブジェクトと本文をエンコードして送信します。
# Base64以外でも確か出来たと思いますが。
Base64エンコードをする関数(encode_base64)を提供してくれるのがMIME::Base64モジュールです。
取り敢えず韓国語は文字化けせずに送れる事を確認してます。
# YahooなのでWeb上ではページの文字コードがEUC-JPなせいで文字化けしますが、UTF-8対応のメールクライアントソフトで受信すれば文字化けせずに表示されました。
UTF-8でメールを送信した場合、受け取り手がUTF-8に対応している必要があります。
Webメールですとページの文字コードがEUC-JPやSJISですと文字化けしてしまいます。
>でぐっぐってみてください
「で、ググってみてください」の間違いです。
これじゃ不親切なので参考にしたページのURLを書いておきます。
http://www.securehtml.jp/utf-8/perl_utf_mail.html
>9 想羅さん
もしかして、試したソースって一切エンコード処理を書かずにやっていたり
しませんかね。
元々のソースは Perl 5 ベースでも動作しますので。



で本題。
メールについてですが以下のエンコードを行う必要があります。

・ヘッダの Content-Type に利用する文字コードを記述
・本文を Content-Type にて指定した文字コードにて記述

今回であれば更に HTML 表示する文字コードを考える必要があります。
(元々のソースは Shift_JIS となっている)

この辺りがトピ主さんの中で整理出来ていないので混乱しているだけの
様に見受けられます。


元のソースは日本語前提ですので、以下の様になっています。

・Perl のソースは EUC でも Shift_JIS でも動作する様になっている
・HTML は Shift_JIS
・メール本文は日本語なので ISO-2022-JP (JIS)
・メールヘッダは ISO-2022-JP を指定


で、想羅さんが Jcode.pm で試されて問題なかったという部分はこの様に
整理しているからだと思われます。

・Perl のソースは UTF-8
・HTML は UTF-8
・メール本文は UTF-8 を Base64 エンコードして送付
 (Base64 で行うのは MTA か MUA の不具合に起因する対応になります)
・メールヘッダは UTF-8 を指定

文字コードを一切変えていないから Jcode.pm を利用する必要も無い状態かなと。


この辺りは自分の中できちんと整理しておかないと対応後に更に文字化けが
発生した際の問題切り分けが出来なくなります。
UTF-8 で送信しても理解してくれない MUA はまだまだ存在していますからね。
元のスクリプトはEUC-JPでは一部正しく動作しません。
# y_mail.cgiのmesサブルーチンでの出力が化けます。


私の試したのはみゃさんがか仰る通りです。
これって何かよくないですか?
# Base64エンコードするのはそういう理由があったんですね。
# 知りませんでした。
# 勉強になります。

UTF-8で送信すれば受け取り手が対応していない可能性があるが、JISに変換して送ろうとすると文字化けする事がある。
Jcode.pmを使いUTF-8からJISに変換して送ってみたのですが、一部文字化け、ハングルがHTMLの数値参照になりました。
Webで見ればハングルは表示されるのですが、メーラーで落として見るとやはり&#〜;になってしまう。
メールは難しいですね。
JIS(ISO2022-JP)って日本語のコードですから、当然ハングルはコードが無いので変換無効(=数値参照)ですね。
韓国語圏向けに同じような事をやろうと思ったら ISO-2022-KR か EUC で処理を行う必要があった気がします。


想羅さんの対応は utf-8 時のヘッダ情報に地震が無いので下に書いてある(私の知識不足による)疑問点が間違っているかもしれませんが、考え方としては特に問題ないと思います。

#↓この辺りが自信の無い部分。。
#・本文で8BIT使いたい場合は Quoted-Printable 必須だったかも、とか。
#・記述していないと勝手に(MTA/MUAが)7BIT判断して文字化けの原因となるとか。
#・Base64 時はヘッダ情報どうやるんだっけかなぁとか。


UTF-8 対応=多言語対応になると単純に思っていると思わぬ落とし穴もあったりで気をつけなければならない部分だったりします。
トピ主です、皆さんありがとうございます。

ちゃんとついて行ってませんが(汗)とりあえず、

・Perl のソースは UTF-8
・HTML は UTF-8
までの変更は問題ないですあせあせ

・メール本文は UTF-8 を Base64 エンコードして送付
 (Base64 で行うのは MTA か MUA の不具合に起因する対応になります)
・メールヘッダは UTF-8 を指定
ここからがよく分からないとふらふら

想羅さんの紹介して頂いたページ(http://www.securehtml.jp/utf-8/perl_utf_mail.html)の、どの部分をどこに挿入すべきか、分かりません。

手ほどきのほど、宜しくお願い致しますm(__)m

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

超初心者向けCGI講座 更新情報

超初心者向けCGI講座のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング