我尝试使用utf-8编码将数据库中的数值变量包含到邮件中。
这是php代码:
$req = $bdd->prepare('SELECT prix FROM offres WHERE rang=?');
$req->execute(array(1));
$donnees=$req->fetch();
$passage_ligne = "\n";
$v = 10.15;
$text='essai1 = '.$v;
$text.=$passage_ligne;
$text.= 'essai2 = '.$donnees['prix'];
$text.=' here is a french accent: é';
$v=$donnees['prix'];
$text.=$passage_ligne."essai3 = ".$v;
echo $text;
$from='[email protected]';
$replyto='[email protected]';
$Xmailer='PHP/';
$header = 'From: '. $from . $passage_ligne .'Reply-To: '. $replyto . $passage_ligne .'X-Mailer: '. $Xmailer . phpversion();
$header.= "MIME-Version: 1.0". $passage_ligne;
$header.= "Content-Type: text/plain; charset=utf-8". $passage_ligne;
$header.= "Content-Transfer-Encoding: quoted-printable". $passage_ligne;
$passage_ligne .'X-Mailer: '. $Xmailer . phpversion();
mail('[email protected]','sujet',$text,$header);
数字变量$ donnees ['prix'] = 18确实显示在屏幕上:
essai1 = 10.15 essai2 = 18 here is a french accent: é essai3 = 18
但不是在邮件中,它被截断为“8”:
essai1 = 10.15
essai2 =8 here is a french accent: é
essai3 =8
如果我使用以下标题:
$header = 'From: '. $from . $passage_ligne .'Reply-To: '. $replyto . $passage_ligne .'X-Mailer: '. $Xmailer . phpversion();
数字变量在邮件中正确显示,但不是重音符号:
essai1 = 10.15
essai2 = 18 here is a french accent: é
essai3 = 18
有没有办法同时在同一个邮件? - 谢谢
=
字符在quoted-printable编码中具有特殊含义。它被用作转义序列的前缀;它后跟2个十六进制数字来编码非打印字符。
在你的情况下,你发送= 18
。 =
之后的两个字符被视为十六进制代码1
。
如果要在带引号的可打印邮件中发送文字=
,则需要将其编码为=3D
。
$v = 10.15;
$text='essai1 =3D '.$v;
$text.=$passage_ligne;
$text.= 'essai2 =3D '.$donnees['prix'];
$text.=' here is a french accent: é';
$v=$donnees['prix'];
$text.=$passage_ligne."essai3 =3D ".$v;
或者你可以使用quoted_printable_encode
函数。
mail('[email protected]','sujet',quoted_printable_encode($text),$header);
后者可能是最好的解决方案,它也可以用重音字符解决你的问题。