[PHP-users 33318] Re: (手がかり有り)この文字化けの対処方法をご提案願います。
kj
tribute0404 @ yahoo.co.jp
2008年 2月 21日 (木) 17:55:51 JST
sublime様、あさかわ様、goungoun様
お世話になっております。門戸(kj)です。
>なぜならば、mysqlのSET NAMESは
>クライアント(この場合PHP)の、期待するコード(この場合
>EUC-JP)を指定するためのものです。
大変失礼致しました。MySQLとやりとりするコードを
PHPのコードであるEUC-JPにするのが目的なのに、
意味をよく調べないまま、MySQLのデフォルト文字セットを
セットしていました。。。
ということは私のソース(EUC-JP)はそこを直しますと、
$enc_disp = "EUC-JP";
$enc_db = "EUC-JP";
(中略:DB接続)
$sql = "SET NAMES ujis";//★utf-8から修正
$res = mysql_query($sql);
$sql = "INSERT INTO〜(中略)";
$res = mysql_query(mb_convert_encoding($sql, "UTF-8","EUC-JP"), $conn) or
die("
失敗");
↓
$res = mysql_query($sql, $conn) or die("失敗");
と、最後の行もmb_convert_encodingでutf-8にするのは
必要なくなるという理解でよろしいでしょうか。
・PHPスクリプトのソースの文字コードは?
・internal_encodingは?
・HTMLの文字コードは?(PHPからの出力)
・PHPスクリプトがPOST,GETで受け取る文字コードは?(PHPの入力)
・データベースの文字コードは?
・メールの文字コード(エンコード)は?
⇒まずはこれらをきちんと押さえます。
さらにsublimeさまのアドバイスにもありましたとおりテストを行っていると、
メールの件名(日本語、直打ち固定文字列)が
mail関数だと文字化けせず、mb_send_mailですと文字化けする
症状にはまってしまいました。
色々調べて試してみたのですが、mail関数でしかうまくいきません。
しかしこのままですと、理解していないまま「たまたま」
うまくいっている状態になってしまいますので、
原因をご相談させて頂けたらと思います。
(ソース)
$from="(省略)";
$to="(省略)";//EUC-JPのHTMLからPOSTされる。
$subject="「○○診断」エントリー完了のお知らせです。";
//元のエンコーディングを保存※1
//$orgEncoding = mb_internal_encoding();
//変換したい文字列のエンコーディングをセット※1
//mb_internal_encoding("ISO-2022-JP");
$subject=mb_encode_mimeheader($subject, "ISO-2022-JP","B","\n");
//保存しておいたエンコーディングに戻す※1
//mb_internal_encoding($orgEncoding);
$headers = "From:$from\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/plain; charset=iso-2022-jp\n";
$headers .= "Content-Transfer-Encoding: 7bit\n";
$headers .= "X-Mailer: PHPWebMailer\n";
$contents="ここにメール本文が来ます。";
$message = mb_convert_encoding($contents, "ISO-2022-JP", "EUC-JP");
//メール送信★mb_send_mailだとSubject(メール件名)のみ文字化け…
mail($to, $subject, $message, $headers);
以上です。
(補足)
・コメントアウトしている「※1」×3行は、
「mb_encode_mimeheaderを使う時はこれが必要」と書いてある
サイトを見つけましたので、それに従ってみましたが、
やっても文字化けは起こりました。
・smtpログは見てみましたが、
今回の「件名のみが文字化けする」という痕跡は
残っていないように思えます。(メールは無事届くからです。)
日本語の件名なので、できればたまたまうまくいっている
mailよりは、きちんと何かを設定してmb_send_mailで
完成させた方がいいのではと思っているのですが、
もし何かご意見などございましたら、お知恵を貸して頂けると嬉しいです。
門戸kj
--------------------------------------
Easy + Joy + Powerful = Yahoo! Bookmarks x Toolbar
http://pr.mail.yahoo.co.jp/toolbar/
PHP-users メーリングリストの案内