Дополнительный символ появляется в теме письма перед символом фунта - PullRequest
0 голосов
/ 13 января 2019

Я использую php-файл системы классов для отправки электронного письма в формате HTML из базы данных mysql, перед символом фунта в заголовке темы появляется дополнительный символ, но основное содержание письма в порядке.

Я пытался использовать кодировку 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);

1 Ответ

0 голосов
/ 08 февраля 2019

В UTF-8 £ символ кодируется на двух байтах: C2 A3 C2 A3, декодированный с использованием ISO-8859-1 , дает: £

Так что я предполагаю, что значение субъекта, которое вы получаете из базы данных MySQL, закодировано в UTF-8, тогда как $ dw_mail-> Subject ожидает значение, закодированное в ISO-8859-1.

Использование mb-convert-encoding должно позволить вам выполнить преобразование из UTF-8 в ISO-8859-1. Обратите внимание, что не все символы UTF-8 могут быть сопоставлены с ISO-8859-1, поэтому у вас могут возникнуть проблемы с другими специальными символами.

...