スレッド表示 | フラット表示〕 全トピック 920 件中 765 番目 次≫ ≪前

文字化け

created: 2003-10-29 10:26 | modified: 2003-11-04 23:49 | reply: 7

[832] 文字化け

user: 314 | created: 2003-10-29 10:26
こんにちは。
フォームメールのスクリプトを書いて、それで飛ばしたメールをアウトルック等のメーラーで開くとちゃんとみれるのですがWebメール(hotmailとか)で開くと文字化けするって聞いたことありますでしょうか?

何か特別な記述がいるのでしょうか?
ご存知であれば教えてください。
reply: 833 返信 編集 削除

[833] メーラーの違いによる文字化け

user: ゆうじ | created: 2003-10-29 11:22
は充分ありえることだと思います。
判断材料が足りないので、

1.フォームメールスクリプトの仕様
 ・送信手段(mb_send_mail、mail、他のMTA)
 ・送信できるメールの種類(テキスト、マルチパート)
 ・メールヘッダのエンコーディングに関する記述
 ・実際の文字エンコーディング

2.送信しているメールに機種依存文字などは含まれていないか?

あと、実際どのような文字化けが起こっているかお知らせいただければ、
解決のお手伝いができるかもしれません。
Parent: 832  reply: 835 返信 編集 削除

[835] こんな感じです。

user: 314 | created: 2003-10-29 20:49
こんにちは。

借りてるサーバがですねphpinfoを見れないというとこなので、どういう設定状況かはわからないのですが、一応メールは飛んでるのでエンコーディングの問題だけかとおもうのですが…

送信は「mb_send_mail」を使っています。
機種依存文字は含まれていません。

$header = i18n_convert($header,"UTF-8","AUTO");
$from = i18n_convert($from,"UTF-8","AUTO");
mb_send_mail($dest, $subject, $message,"From: $header<$from>");

一部ですがこんな感じです。
これだけで何かわかりますか?
Parent: 833  reply: 837 返信 編集 削除

[837] UTF-8 vs JIS

user: ゆうじ | created: 2003-10-29 23:54
phpinfo()が見れないのは痛いところですね。


$header と $from の文字コードを UTF-8 にされていますね。
エンコードが UTF-8 + base64 なのかもしれませんね。

メールに日本語を含める場合文字コードは JIS、
メールヘッダに日本語を含める場合は、
さらに base64 エンコードするというのが基本です。
これなら大抵のメーラーで正しくメールを読めます。

# 参考:RFC 2045
# http://www.asahi-net.or.jp/~bd9y-ktu/dtd_f/rfc_f/rfc2045j.html
# ↑これが元。全てを理解できるものではありません。

どのような文字コードであってもメールは送信できてしまいます。
ここは推測になりますが、
ウェブメーラーが基本どおりのメールしか処理できない仕様なのに対し、
Outlookは各文字コードを判断し直し表示しているのではないかと思います。
この違いが原因となってウェブメーラーで文字化けがおきてるのでしょう。
(ウェブメーラーの仕様が普通だと思いますが・・・)


フォームメールスクリプトが送信したメールのヘッダを見て
エンコード部分がどのようになっているか確認してみてください。
mb_send_mailで送信した場合下のどちらかだと思います。

●JISの場合
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

●UTF-8の場合
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: BASE64

多くのメーラーで読めるようにするには JIS にすることをオススメします。
現在 UTF-8 ならば、

1.フォームメールスクリプトの始めの方で以下の行を書き加える。
mb_language("Japanese");

2.UTF-8へのエンコード処理を省いて直接mb_send_mailに渡す。
(mb_send_mailは適切なエンコード処理を自動で行なってくれます)
// $header = i18n_convert($header,"UTF-8","AUTO");  //
// $from = i18n_convert($from,"UTF-8","AUTO");
mb_send_mail($dest, $subject, $message,"From: $header<$from>");

これでJISで送信されるはずです。
がんばってみてください。

# もし、よくわからないようでしたら、
# 私がテスト用に使っているアドレス宛てに
# そのフォームメールからメールを送ってみてください。
# エンコード処理がどのようになっているかOEで確認してみます。
# rb58@sound-uz.jp
Parent: 835  reply: 853 返信 編集 削除

[853] テストしたのですが

user: 314 | created: 2003-10-30 18:38
こんばんは。
メール本文はアウトルックでは文字化けしないのですが、名前($header)の部分が文字化けします。変な漢字に。

お言葉に甘えそちらにメールを送信いたしました。
お手数ですがちょっと見てもらえますか?
Parent: 837  reply: 856 返信 編集 削除

[856] ヘッダは自動的ではないらしいです。

user: ゆうじ | created: 2003-10-30 22:52
メール確認しました。現在JISで送信されてるようですね。
おっしゃってる通りこちらでも送信者欄が化けていました。

メールヘッダの一部を抜粋します。
Subject: =?ISO-2022-JP?B?GyRCJD0kTkI+GyhC?=
From: XXXXXXXX <aaaaa@bbbbccc>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
X-UIDL: 394c081ec284E85461accb0cd596479d
Status: RO

1行目:Subject: =?ISO-2022-JP?B?GyRCJD0kTkI+GyhC?=
日本語が JIS → base64 の順番で正しくエンコードされると、
このようになります。OKです。

2行目:From: XXXXXXXX <aaaaa@bbbbccc>
XXXXXXXX 部分がこちらでは半角カナに化けてました。
この部分は、mb_send_mail の第4引数で渡した値、
"From: $header <$from>" ←これですね。

ヘッダ部に使える文字はアスキーだけという制限があるのですが、
mb_send_mailはこれを前提にしてあるのか、
追加ヘッダまでは自動でエンコードしてくれないようです。
認識不足で間違ったことをお伝えしてしまいました。すみません。

化けてるのは、$header 部分だけなので、
これを Subject: と同じ正しくエンコードしてしまいましょう
JISにして、base64にして、'=?ISO-2022-JP?B?' と '?=' で挟む。

$header = '=?ISO-2022-JP?B?'. base64_encoding( mb_convert_encoding( $header, "JIS", "auto" ) ). '?=';

これをmb_send_mailの前に追記すればいいと思います。

# これで改善されると、メールヘッダの異常を示す
# Status: RO ←この行も表示されなくなります。
# あわせて確認いただければ、より良いと思います。
Parent: 853  reply: 877 返信 編集 削除

[877] 出来ました?

user: 314 | created: 2003-11-04 15:14
返事が遅くなりすみませんでした。

おかげさまで正常に見ることができました。
ありがとうございました。

それにしてもゆうじさん、PHPお詳しいですね。
プロフィールみるかぎり本職でないような感じですが…
あやかりたいですな。。。
Parent: 856  reply: 879 返信 編集 削除

[879] ご報告ありがとうございます

user: ゆうじ | created: 2003-11-04 23:49
丁寧にご報告いただきありがとうございました。

おっしゃる通りプログラマではありませんが、
毎日のようにいろんな質問を受けて、
調べて、試して、お返事していると、
1年くらいでこのくらいのスキルが身についてしまいました。(笑)

まさしく(私に)PHPの基礎体力がつくサイトです。
今後とも宜しくお願いします。
Parent: 877  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 765 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑