仅在 Outlook 中发送的 PHP 电子邮件存在主题字符问题

发布于 2024-12-06 01:14:37 字数 851 浏览 0 评论 0原文

我使用 php 发送邮件,邮件主题有重音。

我在 Outlook 中收到奇怪的字符而不是重音字符。如果我在网络电子邮件客户端中看到该电子邮件,我会发现该主题很完美。

这是我用来发送电子邮件的代码:

$to  = '[email protected]';

$subject = '[WEBSITE] áccent – tésts';

$message = '<p>Test message</p>

$headers = 'MIME-Version: 1.0' . "\r\n";                                          

$headers.= 'From:[email protected]' . "\r\n";                                   

$headers.= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

mail($to, $subject, $message , $headers);

我如何解决这个问题,我必须使用另一个字符集吗?

Im sending a mail using php, and the subject of the mail has accents.

Im receiving weird characters in Outlook instead the accented chars. If i see the email in a web email client i see the subject perfect.

This is the code that im using to send the email:

$to  = '[email protected]';

$subject = '[WEBSITE] áccent – tésts';

$message = '<p>Test message</p>

$headers = 'MIME-Version: 1.0' . "\r\n";                                          

$headers.= 'From:[email protected]' . "\r\n";                                   

$headers.= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

mail($to, $subject, $message , $headers);

How i could solve the issue, do i have to use another charset?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乖乖哒 2024-12-13 01:14:37

发送电子邮件的唯一可靠方法是使用纯 7 位 ASCII,因此当您想使用其他任何内容时,需要对字符串进行正确编码。在您的情况下,[WEBSITE] áccent – tésts 应编码为(例如)=?windows-1252?B?W1dFQlNJVEVdIOFjY2VudCCWIHTpc3Rz?=,其中字符串拆分为:

=?windows-1252?B?W1dFQlNJVEVdIOFjY2VudCCWIHTpc3Rz?=
  ^            ^ ^
  |            | |
 Charset       | Data
               |
              Base64

检查:

echo base64_decode('W1dFQlNJVEVdIOFjY2VudCCWIHTpc3Rz'); // [WEBSITE] áccent – tésts

这只是对非 ASCII 字符串进行编码的可能方法之一的示例。

发送电子邮件时,有很多类似这样的小细节需要注意。这就是为什么您迟早会使用合适的电子邮件包,例如 Swift MailerPHPMailer

The only reliable way to send e-mail is using plain 7 bit ASCII so you need to encode strings properly when you want to use anything else. In your case, [WEBSITE] áccent – tésts should be encoded as (e.g.) =?windows-1252?B?W1dFQlNJVEVdIOFjY2VudCCWIHTpc3Rz?=, where the string splits as:

=?windows-1252?B?W1dFQlNJVEVdIOFjY2VudCCWIHTpc3Rz?=
  ^            ^ ^
  |            | |
 Charset       | Data
               |
              Base64

Check:

echo base64_decode('W1dFQlNJVEVdIOFjY2VudCCWIHTpc3Rz'); // [WEBSITE] áccent – tésts

This is just an example of one of the possible ways to encode non-ASCII strings.

When sending e-mail, there are many little details like this that need attention. That's why sooner or later you end up using a proper e-mail package like Swift Mailer or PHPMailer.

无需解释 2024-12-13 01:14:37

如果存在混合编码类型,特殊字符将被破坏。

PHP 搞乱 HTML 字符集编码

PHP 还有一个选项编码消息。

mb_language('uni'); // mail() encoding

PHP - 多字节字符串

If there is a mix of encoding types, special characters are destroyed.

PHP messing with HTML Charset Encoding

PHP also has an option for encoding messages.

mb_language('uni'); // mail() encoding

PHP - Multibyte String

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文