2008年2月21日

[PHP-users 33318] Re:(手がかり有り)この文字化けの対処方法をご提案願います。

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 mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

投稿者 xml-rpc : 2008年2月21日 17:55
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/70130
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。