使用PHP表单发送的邮件显示乱码日文文本

时间:2017-12-24 10:51:40

标签: php character-encoding phpmailer

我在网上搜索过堆,但似乎没有任何东西可以让我的代码正常工作。我的PHP代码导致电子邮件看起来像这样:

叹涟:鲍勃 メ銇銇銇銇銇銇銇銇銇銇銇銇銇銇銇銇銇銇銇銇銇銇銇銇銇

它们看起来应该是这样的(带有日文字符):

名前:鲍勃 メッセージ:こんいちは。

在字段中输入英文字符时可以正常工作:

名前:克里斯 メッセージ:您好,这是一条测试信息。

这是代码。网站页面本身编码为euc-jp。电子邮件主题显示没有问题。文本在我的Mac邮件应用程序和我的Android设备(gmail应用程序,安卓邮件应用程序)中出现乱码。也许这是htmlspecialchars函数的一个问题。我不太了解php来修复它。请帮帮我!

<?php
// Check for empty fields
if(empty($_POST['name'])        ||
   empty($_POST['email'])       ||
   empty($_POST['message']) ||
   !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
   {
    echo "No arguments Provided!";
    return false;
   }

$name = strip_tags(htmlspecialchars($_POST['name']));
$email_address = strip_tags(htmlspecialchars($_POST['email']));
$message = strip_tags(htmlspecialchars($_POST['message']));


$to = "test@topenglishkanazawa.com\r\n";
$email_subject = "お問い合わせ\r\n";
$email_body = "名前: $name<br><br>メッセージ: $message\r\n";
$headers = "From: webform@topenglishkanazawa.com\r\n";
$headers .= "Reply-To: $email_address\r\n";
$headers .= "Content-Type:text/html; charset=euc-jp\r\n";
mail($to,'=?euc-jp?B?'.base64_encode($email_subject).'?=',$email_body,$headers);
return true;            
?>

更新的代码:

<?php
// Check for empty fields
if(empty($_POST['name'])        ||
   empty($_POST['email'])       ||
   empty($_POST['message']) ||
   !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
   {
    echo "No arguments Provided!";
    return false;
   }
$name = strip_tags(htmlspecialchars($_POST['name']));
$email_address = strip_tags(htmlspecialchars($_POST['email']));
$message = strip_tags(htmlspecialchars($_POST['message']));
$to = 'test@topenglishkanazawa.com';
$email_subject = "お問い合わせ";
$email_body = "名前: $name\n\n"."メッセージ: $message";
$headers = "From: webform@topenglishkanazawa.com\n";
$headers .= "Reply-To: $email_address\n";
mail($to,$email_subject,$email_body,$headers);
return true;            
?>

3 个答案:

答案 0 :(得分:0)

我不知道为什么,但你的代码对我来说非常好; 我尝试过:

<?php
$_POST['name']= 'Bob';
$name = $_POST['name'];

$_POST['email']= 'mailforbob@gmail.com';
$_POST['message']= ' こんいちは';
echo $_POST['name'];

// Check for empty fields
if(empty($_POST['name'])        ||
empty($_POST['email'])       ||
empty($_POST['message']) ||
!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
{
echo "No arguments Provided!";
return false;
}
$name = strip_tags(htmlspecialchars($_POST['name'],'EUC-JP'));
$email_address = strip_tags(htmlspecialchars($_POST['email']));
$message = strip_tags(htmlspecialchars($_POST['message'],'EUC-JP'));
$to = 'myemail@myemail.com';
$email_subject = "お問い合わせ";
$email_body = "名前: $name\n\n"."メッセージ: $message";
$headers = "From: webform@topenglishkanazawa.com\r\n";
$headers .= "Reply-To: $email_address\n";
mail($to,$email_subject,$email_body,$headers);
echo 'email sent';
return true;   
?>

我建议您检查浏览器或计算机语言设置;)

答案 1 :(得分:0)

此功能将解决您的问题:

$body_user = mb_convert_encoding($body_user, "UTF-8","UTF-8");

答案 2 :(得分:0)

我遇到了同样的问题,并通过将其放在我的php文件顶部来解决了该问题:

<!doctype html>
<?php header("Content-Type: text/html; charset=UTF-8"); ?>
<html>
<head>

header(“ Content-Type:text / html; charset = UTF-8”); 将所有形式的字符编码为您要寻找的字符。