php邮件-特殊字符

php邮件-特殊字符,php,html,email,Php,Html,Email,海 我有一个php的西班牙语网站。在这种情况下,邮件正文包含一个主题“Clarcud de cotización”,但该主题出现在像Clarcud de cotizaciÃn这样的热邮箱中‏. 但它在邮件部分看起来是正确的。我如何避免这个问题。有人知道吗?您需要使用任何文本编码对主题标题进行编码。请参阅并讨论如何这样做 基本上,您的主题行应该如下所示: 主题:请求de=?UTF-8?Q?cotizaci=C3=B3n= 然后,任何了解MIME的MUA都应该使用正确的字符集正确地呈现主题 编辑:值


我有一个php的西班牙语网站。在这种情况下,邮件正文包含一个主题“Clarcud de cotización”,但该主题出现在像Clarcud de cotizaciÃn这样的热邮箱中‏. 但它在邮件部分看起来是正确的。我如何避免这个问题。有人知道吗?

您需要使用任何文本编码对主题标题进行编码。请参阅并讨论如何这样做

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

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

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

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


从技术上讲,可以对整个字符串使用B编码进行暴力处理,但由于浪费,一般来说,这是一种不好的形式,而且更有可能在RFC(2)指定的单行中超过9999个字符的硬限制822如果您的主题行很长,请使用这种方法。

尝试在电子邮件标题中将
字符集设置为
utf-8

charset=UTF-8
或参阅:

UTF8_mail(
“fromname <my@email.com>”,
“First Last <your@email.com>”,
“Solicitud de cotización”,
“Κείμενο Text”,
“”,
“Solicitud de cotización<hidden_friend@email.com>”
);
UTF8\u邮件(
“fromname”,
“最后一个”,
“科蒂萨翁律师会”,
“εεμενο文本”,
“”,
“科蒂萨翁律师会”
);
Hai!=)要对主题进行编码,您必须执行以下操作:

$subject = 'Solicitud de cotización';

// =?UTF-8?B?U29saWNpdHVkIGRlIGNvdGl6YWNpw7Nu?=
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
如果您使用的是PHP 5.3+,则可以使用
quoted\u printable\u encode()

$subject = 'Solicitud de cotización';

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

我也有同样的问题,现在它对我很好的方式是使用类():


你能定义“热邮箱”和“邮件区”吗?据我所知,MIME将对正文生效。标题仍然需要按照RFC 2047进行编码。@Michael Trausch:我提供的链接也讨论了这一点,而不是
charset
。哇。这个UTF8_邮件函数也遇到了与Alix Axel提供的解决方案相同的问题,也就是说,它使用B编码对字符串进行了浪费性的编码(实际上,在这种情况下和大多数其他情况下,Q更有效)这种解决方案有一个主要问题:它在72个字符时不折叠,这就是按照RFC2822的完整规范创建邮件的程序必须如何工作。它还占用了大量空间,因为它会通过引用根本不需要编码的字符来不必要地增加字符串,因为这些字符在RFC2822邮件的ASCII字符集中。@Michael:有趣的是,你似乎对每个人都投了反对票,而没有投反对票,因为你是唯一一个没有提供具体解决方案的人(我也可以链接到RFC,你知道吗?)…我现在没有时间创建一个类来按照标准的要求处理邮件;但是,我已经阅读了这些标准,它们并不难阅读。我假设OP能够编写代码来处理这种情况,因为它指向了可用于互操作的知识g关于坚持RFC的邮件系统。我之所以否决这些建议,是因为这些建议明显违背了RFC的要求和建议。我无意冒犯任何人。@Michael:我只是觉得在没有更好的解决方案的情况下否决其他人是不公平的。你基本上是在担保“那些家伙是完全错误的”,RFC 2045和2822是正确的-阅读并实施它!我并不反对RFC(相反),但我和@Sarfraz提供的解决方案实施和执行速度更快,清楚地解决了OP问题,并且在至少95%以上的时间(付出或付出)都能完美地工作。相对于其他答案,我不会投赞成票或反对票。如果答案不正确,我会投反对票。记住,投反对票也会损害我的声誉。我没有动力去投反对票,只是为了见鬼,其他人也没有。我确实提供了所需内容的摘要,但这里仍然没有完整的代码答案。我不希望人们哄骗我n-feed me代码,尽管我可能是少数。我不会给出我自己不会在生产中运行的代码,我会否决那些不好的示例,甚至懒得提及角落案例的建议和代码。这只是我的工作方式。对不起,那个家伙想知道如何使其工作。链接到规范并提供答案这就解释了为什么该规范是有用的(当然,假设OP是程序员).我没有时间填鸭式地给学生上课,但我认为,如果有人提出一个问题,而这个问题又违背了我们将互联网连接在一起的规范,那么给他一个解决方案就没那么有用了。如果你不关心RFC合规性,至少要说清楚。根据我的经验@所以,链接通常不被认为是有效的有用的答案。如果我没有NDA,我会发布一个工作类,用于邮件生成,符合RFC2822和MIME RFCs,尽管使用不同的语言。因为我没有时间提供正确的代码,但我有时间提供指针(包括Perl中的代码,可以修改)为了让OP可以编写正确的代码,我选择提供OP可以用来编写正确代码的信息。我为我的工作感到自豪,我认为我们所有人都会这样做;如果是这样的话,最好提供正确的信息
<?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!';
}
?>