人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで、mb_send_mailを使用して、文字コードのSJISの文章をメール送信をしているのですが、?がどうしても文字化けします。

¥を削除する対策や、mb_internal_encoding('SJIS')をしているのに、なぜでしょうか?
文字コードを変更するなどの対策方法ではないものでお願いできますと幸いです。

●質問者: makocan
●カテゴリ:インターネット ウェブ制作
✍キーワード:PHP SJIS いもの メール 文字コード
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kn1967
●27ポイント

http://jp.php.net/mb_send_mail

mb_send_mail() は、email を送信します。

ヘッダと 本文は mb_language() の設定に基づき変換、 エンコードされます。

http://jp.php.net/manual/ja/function.mb-language.php

言語とその設定は、Japaneseの場合はISO-2022-JP/Base64、

uniの場合は UTF-8/Base64、Englishの場合はISO-8859-1/quoted printableです。

上記にありますように mb_send_mail は mb_internal_encoding ではなく、mb_language に基づきます。

mb_languageはsjisに対応していませんので、ベースとしている文字コードの変更はダメという事であれば、送る直前でUTF-8などへの文字コード変換を行う必要があります。


2 ● えるふん
●27ポイント

mb_send_mail()はmb_language()やmbstring.languageで日本語(ja,Ja,japanese,Japanese)にしている場合,

mb_internal_encoding()やmbstring.internal_encodingの指定文字エンコードからISO-2022-JPに変換をします.

これは内部で固定の実装なのでmb_send_mail()を使用する限り回避できません(関数の処理をC言語レベルで変更したら別ですけど)

Shift_JISなメールを送信したい場合,自前でmb_send_mail()相当の処理を実装する必要があります.

http://cvs.php.net/viewvc.cgi/php-src/ext/mbstring/mbstring.c?vi...


3 ● tobeoscontinue
●26ポイント

>?がどうしても文字化けします。

2バイト目に0x5Cを持つ文字の問題のように思います。

http://ja.wikipedia.org/wiki/Shift_JIS


>¥を削除する対策

とあるのでこのような処理でShift_JISを理解していないと

?のコード0xfa5cから¥の0x5cを無条件に取っ手しまって

0xfaとしているのではないかと思います。


mb_send_mailに渡す前に文字化けが発生していないか

確かめてみてはどうでしょう。

◎質問者からの返答

以前調べたのですが、mb_send_mail前には文字化けは発生しませんでした。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ