我正在使用一个类系统php文件从mysql数据库发送HTML电子邮件,主题标题中英镑符号前面出现了一个额外的字符,但电子邮件的主要内容很好。
我已经尝试为电子邮件使用UTF字符集,但这会破坏实际的电子邮件内容区域,因此所有电子邮件都不再发送HTML内容,尽管它确实解决了英镑符号问题。还尝试了str_replace如果有一种编码方法,那么标题仅使用UTF和内容HTML将是完美的解决方案。
电子邮件主题代码部分在下面(省略了私人详细信息)
function
sendTemplateEmail($groupid,$subject,$body,$tipster_code,
$email_image,$tipster_name,$only_active="",
{
global $conn;
$errors = "";
$email_list = array();
$total_users = 0;
$group = (is_numeric($groupid)) ? $groupid : 0;
#die("body = ".$body);
$body = str_replace("£","£",$body);
$body = str_replace("Â","",$body);
$subject = str_replace("Â","",$subject);
$html = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
$html .= "<html lang='en'>\n";
$html .= "<head>\n";
$html .= "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
$html .= "<title>O.com</title>\n";
$html .= "</head>\n";
$html .= "<body style='width:800px;' bgcolor=\"#FFFFFF\">\n";
$dw_mail->AddReplyTo("admin@","");
$dw_mail->ReturnPath = "admin@";
$dw_mail->From = $from;
$dw_mail->FromName = $from;
$dw_mail->AddAddress($users['email'],"");
$dw_mail->AddAddress("@hotmail.com","");
$dw_mail->WordWrap = 50; // set word wrap
//$dw_mail->AddAttachment(PDF_PATH."app-".$app.".pdf");
$dw_mail->IsHTML(); // send as html
$dw_mail->Subject = stripslashes($subject);
$dw_mail->Body = $html;
$dw_mail->AltBody = stripslashes($alt_body);
答案 0 :(得分:1)
在UTF-8中,两个字节上的字符是encoded:C2 A3 使用ISO-8859-1解码的C2 A3给出:£
因此,我想您从MySQL数据库获得的主题的值是以UTF-8编码的,而$ dw_mail-> Subject则期望值是以ISO-8859-1编码的。
使用mb-convert-encoding应该可以让您完成从UTF-8到ISO-8859-1的转换。请注意,并非所有UTF-8字符都可以映射到ISO-8859-1,因此您可能会遇到其他特殊字符的问题。