プロが教えるわが家の防犯対策術!

件名が文字化けしてしまう。PHPで送信フォームを作成しましたが件名が?????と
文字化けします。


<?
require_once("./lib/form_check.lib");



$type = $_POST['type'];
$company = $_POST['company'];
$industry = $_POST['industry'];
$post = $_POST['post'];
$name = $_POST['name'];
$address = $_POST['address'];
$tel = $_POST['tel'];
$mail = $_POST['mail'];
$detail = $_POST['detail'];

type_name($type);



$to = "■■■@■■■■";
$subject = "お問い合わせ";
$header= "From:".$mail;
$msg ="────────────────────────────────────────────\n";
$msg .="■お問い合わせ内容\n".$type_name."\n\n";
$msg .="■会社名\n".$company."\n\n";
$msg .="■業種\n".$industry."\n\n";
$msg .="■役職・部署名\n".$post."\n\n";
$msg .="■氏名\n".$name."\n\n";
$msg .="■住所\n".$address."\n\n";
$msg .="■電話番号\n".$tel."\n\n";
$msg .="■メールアドレス\n".$mail."\n\n";
$msg .="■お問い合わせ詳細\n".$detail."\n";

mail($to,$subject,$msg,$header);




?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">

<head>
<title>お問い合わせ</title>
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">




これではダメなので

mb_language("japanese");
mb_internal_encoding("EUC-JP");
mb_send_mail($to,$subject,$msg,$header);

と付け足しました。
これで件名が????になるのはふせげたのですが今度は送信後のページ全体が
文字化けとなりお手上げ状態です。
どう組めばいいのでしょうか?

A 回答 (4件)

mb_send_mail()はなにかと問題がおおくてお薦めできません。


mail()を使うときに普通にエンコードしてやればよいのでは?

$subject=mb_convert_encoding($subject,"JIS","EUC-JP");
$subject=mb_encode_mimeheader($subject,"JIS");

mail($to,$subject,$msg,$header);
    • good
    • 0
この回答へのお礼

ありがとうございます。
その方法ですと件名が無記名になってしまうのです。
「お問い合わせ」という件名を付けたいのですが
どのようにすればいいのでしょうか?

お礼日時:2010/01/12 12:46

>その方法ですと件名が無記名になってしまうのです。



ならないでしょ・・・

<?
$subject="お問い合わせ";
$subject=mb_convert_encoding($subject,"JIS","EUC-JP");
$subject=mb_encode_mimeheader($subject,"JIS");
print $subject;
?>

もちろんこの場合はソースがEUCで書かれていなければいけませんが。
    • good
    • 0
この回答へのお礼

度々ありがとうございます。
<?
require_once("./lib/form_check.lib");

$type = $_POST['type'];
$company = $_POST['company'];
$industry = $_POST['industry'];
$post = $_POST['post'];
$name = $_POST['name'];
$address = $_POST['address'];
$tel = $_POST['tel'];
$mail = $_POST['mail'];
$detail = $_POST['detail'];

type_name($type);

$to = "■@■";
$subject="お問い合わせ";
$subject=mb_convert_encoding($subject,"JIS","EUC-JP");
$subject=mb_encode_mimeheader($subject,"JIS");
$header= "From:".$mail;
$msg ="────────────────────────────────────────────\n";
$msg .="■お問い合わせ内容\n".$type_name."\n\n";
$msg .="■会社名\n".$company."\n\n";
$msg .="■業種\n".$industry."\n\n";
$msg .="■役職・部署名\n".$post."\n\n";
$msg .="■氏名\n".$name."\n\n";
$msg .="■住所\n".$address."\n\n";
$msg .="■電話番号\n".$tel."\n\n";
$msg .="■メールアドレス\n".$mail."\n\n";
$msg .="■お問い合わせ詳細\n".$detail."\n";

mail($to,$subject,$msg,$header);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">

<head>
<title>お問い合わせ</title>
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">

このようにしたのですが件名はちゃんとなったのですが本文などが
文字化けしてしまいました。

これにすると
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
件名部分がなく本文が大丈夫の状態です。

お礼日時:2010/01/12 13:33

良くあるミスですけど、エンコーディングを変更した際にPHPファイルの文字コードセットも変更していますか?


或いは入力フォームが正しくエンコーディングされていますか?
    • good
    • 0

bodyやheaderもちゃんとやろうよ・・・


(もうすこし調べてから質問してほしいところ)

$subject="お問い合わせ";
$subject=mb_convert_encoding($subject,"JIS","EUC-JP");
$subject=mb_encode_mimeheader($subject,"JIS");

$from ="おくるひと";
$from=mb_convert_encoding($from,"JIS","EUC-JP");
$from=mb_encode_mimeheader($from,"JIS");

$message="・・・・";
$message=mb_convert_encoding($message,"JIS","EUC-JP");

$version=phpversion();

$header=<<<eof
From: {$from} <xxx@exsample.com>
Return-Path: <xxx@exsample.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
X-Mailer: PHP/{$version}
eof;

mail($to,$subject,$message,$header);

とか・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!