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


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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/02/12 00:35:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント27pt

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などへの文字コード変換を行う必要があります。

id:elf No.2

回答回数76ベストアンサー獲得回数8

ポイント27pt

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...

id:tobeoscontinue No.3

回答回数220ベストアンサー獲得回数59

ポイント26pt

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

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

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


>¥を削除する対策

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

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

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


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

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

id:makocan

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

2007/02/07 21:14:33

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません