PHP | 旧字や半角カナなどメール送信時の日本語文字化け対策

mb_send_mail” でメール送信する際、”mb_language” の設定が “ja” の場合、旧字や半角カナなど一部の日本語文字列が文字化けされた状態で送信されてしまいます。

文字化けになる設定

// 言語設定
$lang = 'ja'; 
mb_language($lang);

// メール送信
mb_send_mail($to_mail, $subject, $mailbody, $mailheader);

文字化けせず正常に送信される設定

// 言語設定
$lang = 'uni'; 
mb_language($lang);

// メール送信
mb_send_mail($to_mail, $subject, $mailbody, $mailheader);

メール送信サンプル

サンプル

// 送信先・内容
$to_mail  = '送信先メールアドレス';
$subject  = 'メールサブジェクト';

$mailbody = <<< EOM
1. 髙
2. ㈱
3. ①
4. ア
EOM;

// 送信元
$from_name  = '送信元の名前';
$from_mail  = '送信元メールアドレス';
$mailheader = "From: " . mb_encode_mimeheader($from_name) . "<{$from_mail}>";

// 言語設定
// "mb_send_mail()" は "mb_language()" の設定内容を参照
// 旧字の文字化け対応のため "uni" を設定
$lang = 'uni'; // "Japanese", "ja","English", "en", "uni"
mb_language($lang);

// メール送信
mb_send_mail($to_mail, $subject, $mailbody, $mailheader);

言語設定が “ja” の場合

“mb_language” の設定が “ja” だと「?」になって送信されます。

1. ?
2. ?
3. ?
4. ?

言語設定が “uni” の場合

“mb_language” の設定が “uni” だと文字化けせず正常に送信されます。

1. 髙
2. ㈱
3. ①
4. ア

動作環境情報

"エックスサーバー" スタンダード(旧X10)
"PHP" 7.4.13

コメント

タイトルとURLをコピーしました