php邮件 - 特殊字符

时间:2010-05-04 04:40:12

标签: php html email

我在php中有一个西班牙语网站。在这个邮件正文中包含一个主题“Solicituddecotización”,但主题出现在像Solicituddecotización这样的热门邮箱中。但它在邮件部分显得正确。我如何避免这个问题。有人知道吗?

4 个答案:

答案 0 :(得分:6)

海! =)要对主题进行编码,您必须执行此操作:

$subject = 'Solicitud de cotización';

// =?UTF-8?B?U29saWNpdHVkIGRlIGNvdGl6YWNpw7Nu?=
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';

如果您使用的是PHP 5.3+,则可以使用quoted_printable_encode()代替:

$subject = 'Solicitud de cotización';

// =?UTF-8?Q?Solicitud de cotizaci=C3=B3n?=
$subject = '=?UTF-8?Q?' . quoted_printable_encode($subject) . '?=';

答案 1 :(得分:4)

您需要使用您正在使用的任何文本编码对主题标题进行编码。请参阅http://metacpan.org/pod/Encode::MIME::Headerhttp://www.faqs.org/rfcs/rfc2047.html,了解相关内容。

基本上,您的主题行应如下所示:

主题:Solicitud de =?UTF-8?Q?cotizaci = C3 = B3n?=

然后,任何了解MIME的MUA都应使用正确的字符集正确呈现主题。

编辑:值得一提的是RFC2822将ASCII指定为邮件消息头的字符编码,这就是引用必要的原因。它还指定行不应超过72个字符,因此可能需要折叠,并且在生成要在RFC(2)822邮件系统中处理的消息时应考虑到这一点。最后,使用B编码对于你提供的字符串没有多大意义,因为Q编码占用的空间较少(就此而言,你只想引用一堆实际使用字符的单词在ASCII字符集之外)。

技术上可能只是对整个字符串使用B编码进行暴力破解,但由于浪费而一般说来形式不好,而且你更有可能超过硬RFC(2)822标准指定的单行中9,999个字符的限制,如果你有一个很长的主题行。

答案 2 :(得分:3)

我有同样的问题,现在它对我有用的方法是使用类(phpMailer):

<?php
require_once('class.phpmailer.php');
$mail           = new PHPMailer(); // defaults to using php "mail()"

// Here's the code that allows special chars in subject and body
$mail->CharSet  = 'UTF-8';
$mail->Encoding = 'quoted-printable';

// From and reply data
$mail->AddReplyTo('name@yourdomain.com', 'First Last');
$mail->SetFrom('name@yourdomain.com', 'First Last');
$mail->AddReplyTo('name@yourdomain.com', 'First Last');
// Receiver
$address        = 'whoto@otherdomain.com';
$mail->AddAddress($address, 'John Doe');
// Message
$mail->Subject  = 'PHPMailer Test Subject via mail(), basic';
$mail->Body     = 'Message sent from website';
// Attachment(s)
$mail->AddAttachment('images/phpmailer.gif');
$mail->AddAttachment('images/phpmailer_mini.gif');

// Try to send mail
if( ! $mail->Send())
{
  echo 'Mailer Error: ' . $mail->ErrorInfo;
}
else
{
  echo 'Message sent!';
}
?>

答案 3 :(得分:-1)

尝试在电子邮件标题中设置charsetutf-8

charset=UTF-8

或者看:

<强> UTF8 ready php mail function

UTF8_mail(
“fromname <my@email.com>”,
“First Last <your@email.com>”,
“Solicitud de cotización”,
“Κείμενο Text”,
“”,
“Solicitud de cotización<hidden_friend@email.com>”
);