www.kkoba.com  » kkobaのblog

2004年08月29日

[MT3.0] メールの文字化け対策

コメント、トラックバックの通知メールのタイトルと本文の一部が文字化けしてしまう。原因は、案の定文字コードとしてEUC-JPを利用していることだった。

以下は、/lib/MT/App/Comments.pmの425行目からの内容

my %head = ( To => $author->email,
    From => $from_addr,
    Subject =>
    '[' . $blog->name . '] ' .
    $app->translate('New Comment Posted to \'[_1]\'',
        $entry->title)
);

translate()関数の中では、'New Comment Posted to'の部分を、/lib/MT/L10N/ja.pmに記述されているUTF-8の文字列に置き換え、その後mt.cfgのPublishCharsetに記述されている文字列に変換している。

ところが$entry->titleはEUC-JPであるため、結果としてUTF-8とEUC-JP混在の文字列をEUC-JPに変換することになり、文字化けが発生してしまう。

いくつか解決策は考えられて、/lib/MT/L10N/ja.pmの内容をUTF-8に変換し、標準のコードをUTF-8としている部分を全てEUC-JPにすることも考えた。この方法には日本語メッセージをEUC-JPで編集できるなどのメリットもあるが、Movable Type自体のバージョンアップに追随するのが大変になりそうなので、楽な解決方法を選んだ。

楽な解決方法 - $entry->titleを一度UTF-8に無理やり変換

    $app->translate('New Comment Posted to \'[_1]\'',
        MT::I18N::encode_text($entry->title,'','utf-8'))

楽と言っても、同様に直すところが何箇所もあって結構大変。

以下追記

俺のやり方、ダサダサでした。

ogawa::memorandaの、(2) PublishCharsetがUTF-8以外のとき、コメント・トラックバックの通知メールのタイトルなどが文字化けする(translateの問題)の方が、ずっとスマートです。っていうか、どうしてこのやり方にしなかったんだろう俺。

投稿者 かつ : 2004年08月29日 01:05

この記事のトラックバックURL

トラックバック一覧 (0件)

コメント一覧 (0件)

新規にコメントする




情報を登録する?



年間カレンダー
2007
12
 
11
1
10
1
09
1
08
 
07
 
06
 
05
 
04
3
03
7
02
3
01
4
2006
12
1
11
1
10
1
09
1
08
1
07
1
06
1
05
2
04
1
03
1
02
1
01
1
2005
12
1
11
1
10
4
09
2
08
1
07
2
06
3
05
7
04
4
03
8
02
6
01
10
2004
12
8
11
14
10
10
09
20
08
12
07
2
06
4
05
2
04
1
03
1
02
1
01
1
2003
12
1
11
1
10
1
09
1
08
1
07
1
06
2
05
2
04
3
03
3
02
7
01
3
2002
12
5
11
3
10
3
09
4
08
7
07
6
06
10
05
7
04
4
03
4
02
8
01
8
2001
12
6
11
12
10
18
09
6
08
 
07
 
06
 
05
 
04
 
03
 
02
 
01
 
2004年08月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

サイト内の検索

このBlogのライセンス