• ベストアンサー

i18n_convert と mb_convert_encoding の違い

メールの文字化け問題で色々ここも見たのですが ズバリ $enc = mb_detect_encoding($body); $body = mb_convert_encoding($body,"AUTO",$enc); と $enc = mb_detect_encoding($body); $body = i18n_convert($body,"AUTO",$enc); の違いが分かりません。 同じ事をしていると思うのですが・・・。 あと、受信するメーラーや PCが変わると 本文が文字化けしたりしなかったりで "AUTO"の部分をJISにしたらまず文字化けします AUTOなら良かったり良くなかったりです php.iniのこともよく出ていましたが 今レンタルサーバー使っています PHP 4.3.2 を入れているようです 文字コードについてはサーバー管理者に聞かないといけないのでしょうか パリッと文字化けしないようにしたいのですが 何かいい方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • inegral
  • ベストアンサー率50% (3/6)
回答No.3

いろいろと試されても文字化けするということですよね. PHPの設定を確認してみてはいかがでしょう?? マルチバイト文字列関数にはphpのinternal_encoding等のmbstringの設定を行わないと正常に動作しない場合があります. 設定されているかどうかは,phpinfoでご確認ください. 以下,mbstring.internal_encodingをSJISとして設定する場合の例です. (1)か(2)の何れかの方法で設定してみてください. 当然のことながら,レンタルサーバなら(2)しかできないですね. (1)php.iniにて設定 以下を記述してください. 設定を有効にするためにはapacheの再起動が必要です. この方法は,該当サーバのphpスクリプト全てに対して有効になります. mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; (2)PHPファイルのあるディレクトリに.htaccessを設置 以下を記述してください. こちらは.htaccessを設置したディレクトリ配下にて有効となります. php_value output_handler mb_output_handler php_value default_charset Shift_JIS php_value mbstring.language Japanese php_flag mbstring.encoding_translation Off php_value mbstring.http_input auto php_value mbstring.http_output SJIS php_value mbstring.internal_encoding SJIS php_value mbstring.substitute_character none 既にご存知でしたら,申し訳ないです….

参考URL:
http://www.shigeweb.jp/php/project_p/?section=setup&page=htaccess
umauma117
質問者

お礼

丁寧な回答ありがとうございます 色々ためしてやっていきまして 何とか文字化けしないところになりましたので このままそっとして使ってみようと思います まだまだ奥が深いPHPですが がんばって勉強していきます ありがとうございました

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

i18n_はPHP3時代の古い関数ですのでmb_関数の方を使うようにしましょう charset=iso-2022-jpはそのままでいいです

umauma117
質問者

お礼

あら・・ 反対でしたね、mbの方へ変えていきます ありがとうございます

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

i18n_convert()はmb_convert_encoding()のエイリアスです。 同じものと考えてください。 http://www.php.net/manual/ja/aliases.php >"AUTO"の部分をJISにしたらまず文字化けします >AUTOなら良かったり良くなかったりです オートを信用するのは厳しいですね。やはりメールでしたら 7bit JISが基本でしょう。もしやってないならメールヘッダーを きちんとわたしてあげてください。

umauma117
質問者

補足

回答ありがとうございます 記述に関しては リンクページを見て分かりました 要は記述方式が古いか新しいかと言うことですね なるべく 新しい方を使います。 今回で言うならi18n_convertの方を使えばいいのですよね あと ヘッダーですが $head .= "Reply-To: ".$from."\n"; $head .= "X-Mailer: PHP/".phpversion()."\n"; $head .= "MIME-Version: 1.0\n"; $head .= "Content-Type: text/plain; charset=iso-2022-jp\n"; $head .= "Content-Transfer-Encoding: 7bit"; としていますが 4行目の charset=iso-2022-jp\n" はこれで良いのでしょうか これも JISに変えないといけませんか? 教えて君になってしまっていますが 良かったら教えてください よろしくお願いします。

関連するQ&A