来自数据库的UTF-8文本在电子邮件中无法正确显示

时间:2014-03-11 09:16:53

标签: php mysql utf-8

我们有一个脚本,使用数据库中的模板和数据编译电子邮件或外国客户端,并通过Phpmailer发送。

模板存储为PHP文件,并使用file_get_contents()作为字符串打开。然后使用一些str_ireplace()在数据库发送之前插入数据,即:

$email_body = str_ireplace('[NAME]', $row['name'], $email_body);

模板中的文本(在HTML中设置了UTF-8)带有重音符号。但是,来自数据库的数据(与归类utf8_general_ci一起存储)无法正确显示钻石内显示的问号,而不是重音符号。

$mail = new PHPMailer();
$mail->CharSet = 'UTF-8';
$mail->AddAddress($to_email);
$mail->IsHTML(true);
$mail->FromName = $from_name;
$mail->From = $from_email;
$mail->AddReplyTo($reply_to);
$mail->Subject = $subject;
$mail->Body = $email_body;
$mail->AltBody = $email_body;
if(!$mail->Send()) {
    ....

如何从数据库中获取文本以显示正确?在PHPMyAdmin中查看时,文本会显示重音符号,因此正确存储。

1 个答案:

答案 0 :(得分:0)

您是否尝试在构建邮件之前向数据库发送“SET NAMES UTF8”查询?

我在一个表上存在类似的问题(与你一样存储了utf8_general_ci),尽管HTML中有元标记,但我无法正确编码文本。 “SET NAMES UTF8”在我的案例中成功了。