如何在电子邮件标题中编码空格?

时间:2012-08-15 13:57:42

标签: php email character-encoding

我想使用PHP中的mail-function发送电子邮件。标题的“FROM”部分应包含带空格的名称

 name with space <mail@server.tld>

不幸的是,有些邮件客户端无法处理这些空间。这就是为什么Thunderbird在名称中添加了引号。

 "name with space" <mail@server.tld>

这样可以正常工作,直到你添加像ÄÖÜ这样的特殊字符,因为它们需要编码。以下内容不起作用:

 "name with ÄÖÜ and space" <mail@server.tld>

这就是为什么我尝试了函数mb_encode_mimeheader

echo mb_encode_mimeheader("name with"." ÄÖÜ"." and space", "ISO-8859-1", "Q");
# result:
# name with =?ISO-8859-1?Q?=C3=84=C3=96=C3=9C=20and=20space?=

这仍然不起作用,因为在特殊字符第一次出现之前,空格仍然在字符串中。正确的结果应该是:

=?ISO-8859-1?Q?name=20with=20=C3=84=C3=96=C3=9C=20and=20space?=

PHP中是否有可以处理此功能的函数?或我应该使用引号和'mb_encode_mimeheader'的混合?或者是否有不同的方法来处理邮件头中的空格?说实话,我不理解RFC822中提到的不同空格的含义。

2 个答案:

答案 0 :(得分:1)

作为IETF says,电子邮件只在其标题中包含ASCII字符。因此,我猜你应该ASCII编码你的电子邮件标题。

但是,根据我在Internet工程任务组发布的新规范中看到的趋势,我们很快就会发现您可能不需要对标头进行编码/解码。

答案 1 :(得分:1)

您不需要报价。 RFC2047编码(即mb_encode)也处理空格。

(虽然对于记录来说,只是普通空格完全没有问题;它们不是某些客户使用引用的原因,无论如何这通常都是完全冗余的。所以空格的结果实际上并不是错误的。)