アプリ版:「スタンプのみでお礼する」機能のリリースについて

web作成、cgiの初心者です。

現在postmailを利用してメールフォームを作成しました。エンコーディングはutf-8です。作成したメールを送ると、受け取ったらタイトル以外全て文字化けしています。

ググってみるといろんな方の方法があり、かなり改造をしないといけないようでいくつか試してみましたが、どうもうまくいきません。

出尽くしているのかも知れませんが、私の理解では解決することができません。よろしければ解決方法、もしくはベストなサイトを教えてくださいませ。

お手数おかけしますが、よろしくお願い致します。

A 回答 (3件)

ダウンロードして中身を見てましたが、以下の修正でうまくいきますでしょうか?



642、643行目の以下を

&jcode::convert(\$key, 'sjis');
&jcode::convert(\$val, 'sjis');
   ↓   ↓
require Encode;
Encode::from_to($key, 'utf8' => 'cp932');
Encode::from_to($val, 'utf8' => 'cp932');

に変更。
    • good
    • 0
この回答へのお礼

早速のアドバイス有難うございます。

やってみたのですが、全体としては文字化けの量は減ったのですが、違う個所が文字化けになりました。

以下のような感じです。以前は送信日時以下も文字化けしていました。

アドバイスありましたら、よろしくお願い致します。

以下フォームより送信したメール内容です
***********************************************************
このメールは自動送信でお送りしています。
以下のとおりフォームメールより送信がありました。



────────────────────────────
▼送信内容
────────────────────────────

?????O = ?????? aaa ?????? aaa
???N?? = aa
?A????\??d?b??? = aaa
???[???A?h???X = aaa
?????O = ?????? aaa ?????? aaa
???]?c??? = ?????c???
???????z = ?O?`?P?O?O???~
??????????? = ?P??
??????N?? = ?P?`?R?N
???X??????? = ???
??ω?\?z(????) = ?P???~
???p??(?K?{) = aaa


────────────────────────────
送信日時 : 2009/12/16(Wed) 22:41
ブラウザ : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; GTB6.3; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
ホスト名 : 222.226.122.247
────────────────────────────

お礼日時:2009/12/16 22:45

> require Encode;



これじゃ駄目だと思います・・・

use Encode;
Encode::from_to($key, 'utf8' => 'cp932');
Encode::from_to($val, 'utf8' => 'cp932');

こうでは?
    • good
    • 0

おそらく、Shift-JISの文字であっても強引にUTF-8と解釈して変換したのが文字化けの原因ではと思います。



文字コードを推測して変換するようにしました。
これでも文字化けは起こりますでしょうか?

642、643行目の以下を

&jcode::convert(\$key, 'sjis');
&jcode::convert(\$val, 'sjis');
   ↓   ↓
use Encode qw(from_to);
use Encode::Guess qw(cp932);

for my $data ( $key, $val ) {
my $enc = guess_encoding($data);
my $char_code = ref $enc ? $enc->name
: $enc =~ /utf8/ ? 'utf8' : 'cp932';

from_to($data, $char_code => 'cp932');
}

に変更。

>No.2さん
useを使うとモジュールをロードをして必ず実行されるので、必要なときにロードされるrequireにしてみました。

ただコードをよく見ると、この部分は必ず実行されるようなので、requireにしてもパフォーマンスの改善にはならないかもしれません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!