繁体字・簡体字の文字化け

aritaさん (2009-08-21 16:59:11) asunova.sakura.ne.jp/formtest/

初めまして。すごく便利にフォームを使わせていただいているのですが、
どうしても繁体字、簡体字の文言を入れると日本語に無い漢字がほぼすべて化けてしまう、、、という状況に陥り非常に困っております。

海外のサイトを見てもなかなかここまでの高性能フォームは無いので、できたら使いたいのですが、この文字化け、何ともならないでしょうか。。。例えば

>拥有超强的就业率(95%以上)、加入在日本首屈一指的数位、艺术专业学校!
>在日本学习、活跃于数位、情报、艺术的专业创作者……
>你愿意将在这个世界中开拓一个属于自己的舞台吗?

という文言(これはどっかのサイトから取ってきた物です。を入力すると

?有超?的就?率(95%以上)、加入在日本首屈一指的数位、????学校!
在日本学?、活?于数位、情?、??的???作者……
你愿意将在?个世界中?拓一个属于自己的舞台??

こんな感じになってしまうのです、、、。

御助けくださいませ。

Re:繁体字・簡体字の文字化け

和田 (2009-08-21 17:43:05) www.synck.com

残念ながらメールフォームプロは繁体字・簡体字に対応しておりません。これは文字コードの変換をJcodeという日本語変換ライブラリを使っているためです。Encodeモジュールを使うか、またはメールをUTF-8で発信させることにより対応は可能です。Encodeモジュールにするにせよ文字コードの問題は避けられないため無変換で送信する方法を書いておきますね。

(1)send.cgiとfunction.cgiでJcodeとついている行をすべて#でコメントアウトします。
(2)send.cgiのeoncodeJISとencodeSJISと記述された行をすべて#でコメントアウトします。
(3)function.cgiの関数sendmail内のcharsetの記述をUTF-8にします。

これでUTF-8でメールが飛ぶようになります。文字コードの変換を行わないため文字化けすることはありませんが、メーラーによってはdefaultchasetの関係で文字エンコードを変更しないと文字化けしているように見える場合があります。

また、件名はBase64エンコードをしないと2バイト文字は化けてしまいますので、件名は英語にするかBase64エンコードを掛けてみてください。

御礼

aritaさん (2009-08-21 18:39:43) asunova.sakura.ne.jp/formtest/

早速の返信、ありがとうございます!!

なるほど、試してみます。
因に、base64でのエンコードはどのファイルを変更すれば良いのでしょうか・・・。
申し訳ありません、素人質問で。

Re:繁体字・簡体字の文字化け

和田 (2009-08-22 16:16:56) www.synck.com

Base64エンコードの意味がもしわからないようであれば難しいと思いますので手をつけないほうが良いかもしれません。ある程度CGIの知識が必要になるので・・・。

中国語の文字化け

スズキさん (2010-02-06 16:48:26) zt.pr-pro.jp/contact_cn.html

和田様

いつも
私も質問させていただきます。
私の使わせていただいてるバージョンはMailform Pro 1.1.5で、使っているサーバはWebARENAです。

私もaritaさんと同じように中国語の文字化けが発生したので、
(1)send.cgiとfunction.cgiでJcodeとついている行をすべて#でコメントアウトします。
(2)send.cgiの eoncodeJISとencodeSJISと記述された行をすべて#でコメントアウトします。
(3)function.cgiの関数 sendmail内のcharsetの記述をUTF-8にします。
この書き換えを行いました。

■send.cgi
6行目 #use Jcode;

59行目 #Jcode::convert(\$config{"subject"},’jis’);
60行目 #$config{"subject"} = Jcode::mime_encode([\$config{"subject"}]);
61行目 #Jcode::convert(\$config{"body"},’jis’);

69行目 #Jcode::convert(\$config{"return_body"},’jis’);
70行目 #Jcode::convert(\$config{"return_subject"},’jis’);
71行目 #$config{"return_subject"} = Jcode::mime_encode([\$config{"return_subject"}]);

■function.cgi
130行目 #Jcode::convert(\$put_field,’sjis’);
143行目 #Jcode::convert(\$put_field,’sjis’);
このように書き換えました。

さらにsendmailの中のcharsetの変更も
237行目 print MAIL "Content-type:text/plain; charset=UTF-8\n";
251行目 print FH "Content-type:text/plain; charset=UTF-8\n";
このように書き換えました。

このあとテスト送信をしてみたのですが、以下のようなエラーが表示されます。

Undefined subroutine &main::getcode called at commons/functions.cgi line 86.

ちなみに表示されるタイミングはフォームに入力後、確認ボタンを押したあとに確認画面が表示され、送信ボタンを押したら表示されます。

以上です。
お助けいただきたいです。よろしくお願い致します。

Re:中国語の文字化け

和田 (2010-02-06 17:17:16) www.synck.com

commons/functions.cgi line 86
つーのは86行目がエラーってことなんでコメントアウトしてみてください86行目。
そこはたしか文字コードチェックしまっせぇ~!という部分だったと思うので
無くても大丈夫ですたぶん。

Re:Re:中国語の文字化け

スズキさん (2010-02-06 17:44:40) zt.pr-pro.jp/contact_cn.html

和田様

早速のご回答ありがとうございました。
コメントアウトしてみたらちゃんとメールが文字化けせずに送れました!
ありがとうございました!!

中国語の文字化け

さちさん (2011-09-26 03:36:07) http://kan-mf.co.jp/chinese/contact.html

和田様

いつもありがとうございます。

お忙しいところ恐縮ですが
私も質問させていただきます。

スズキさんと同じように中国語の文字化けの修正を行ってみたのですが、

(1)send.cgi とfunction.cgiでJcodeとついている行をすべて#でコメントアウトします。
(2)send.cgiの eoncodeJISとencodeSJISと記述された行をすべて#でコメントアウトします。
(3)function.cgiの関数 sendmail内のcharsetの記述をUTF-8にします。

テスト送信をすると、私は以下のようなエラーが表示されました。

Unrecognized character \xC2 at functions.cgi line 202.

エラーの行が違いましたが、202行目をコメントアウトしてみたところまた別のエラーが続いてしまいました。

どうかお助けくださいませ。よろしくお願い致します。