mySQL中的数值变量在php邮件中使用utf-8截断

mySQL中的数值变量在php邮件中使用utf-8截断,php,email,Php,Email,我尝试使用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.= '

我尝试使用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='xxx@wanadoo.fr';
$replyto='xxx@wanadoo.fr';
$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('xxxr@wanadoo.fr','sujet',$text,$header);
数值变量$donnees['prix']=18确实会显示在屏幕上:

essai1 = 10.15 essai2 = 18 here is a french accent: é essai3 = 18
但不是在邮件中,邮件被截断为“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

有没有办法把这两封信都寄到同一封信里谢谢

字符在编码中有特殊意义。它被用作转义序列的前缀;后跟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\u printable\u encode
功能

mail('xxxr@wanadoo.fr','sujet',quoted_printable_encode($text),$header);

后者可能是最好的解决方案,它还可能解决您的重音字符问题。

相关?我试图将数据库设置为utf8-mb4,没有任何更改。我刚刚注意到:Mozilla Thunderbird弹出的邮件注释正确显示了文本。只有在邮件正文中,文本才会被截断(邮件源也是正确的)。
mail('xxxr@wanadoo.fr','sujet',quoted_printable_encode($text),$header);