发送电子邮件和 PHP 中的字符编码


Character Encoding in Sending Email and PHP

我有一个简单的联系页面,它发送带有以下代码的联系人数据的电子邮件。但是我无法阅读它们中的任何一个,因为这些字符不可读。根据我的网站内容,我想这些电子邮件是阿拉伯语。我在浏览器视图中尝试了很多字符编码,但问题仍然存在。例如,这是一封电子邮件的一部分:اØÙ...Ø ̄Ù3/4ور我想知道该代码有什么问题,如何修复它以及如何阅读以前电子邮件中的文本?

<?php
$EmailFrom = "info@example.com";
$EmailTo = "info@example.com";
$Subject = Trim(stripslashes($_POST['City'])); 
$Name = Trim(stripslashes($_POST['Name'])); 
$Tel = Trim(stripslashes($_POST['Tel'])); 
$Email = Trim(stripslashes($_POST['Email'])); 
$Message = Trim(stripslashes($_POST['Message'])); 
// validation
$validationOK=true;
if (!$validationOK) {
  print "<meta http-equiv='"refresh'" content='"0;URL=error.htm'">";
  exit;
}
// prepare email body text
$Body = "";
$Body .= "Name: ";
$Body .= $Name;
$Body .= "'n";
$Body .= "Tel: ";
$Body .= $Tel;
$Body .= "'n";
$Body .= "Email: ";
$Body .= $Email;
$Body .= "'n";
$Body .= "Message: ";
$Body .= $Message;
$Body .= "'n";
// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");
// redirect to success page 
if ($success){
  print "<meta http-equiv='"refresh'" content='"0;URL=contactthanks.php'">";
}
else{
  print "<meta http-equiv='"refresh'" content='"0;URL=error.htm'">";
}
?>

试试这个

$header = "From: <$EmailFrom> 'r'n";
$header .= "MIME-Version: 1.0 'r'n";
$header .= "Content-Type: text/html;charset=utf-8";
$success = mail($EmailTo, $Subject, $Body, $header );

不要使用自己的解决方案来撰写和发送电子邮件,您可能会出错。使用一些电子邮件类,例如PHPMailer。刚刚设置了字符集属性:

$mailer = new PHPMailer();
$mailer->CharSet = 'utf-8';
或者

[swiftmailer][2],或者Pear's Mail Mime