【发布时间】:2012-08-11 23:35:21
【问题描述】:
我想使用 PHP 中的邮件功能发送一封电子邮件。标题的“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 中提到的不同空格的含义。
【问题讨论】:
-
这可能属于stackoverflow。
-
Sven - 如果您同意将其移至 SO,您可以标记您的问题并请求迁移。目前,2 个接近投票是迁移到 SO。
-
其实RFC2047对quoted-printable中的空格有特殊规定;它们可以用下划线表示。但正如我在回复中指出的那样,您实际上不需要对它们进行编码;代码给你的结果很好。
-
我刚刚意识到,空格不是问题,而是我使用的括号。见stackoverflow.com/questions/11989915/…
标签: php email character-encoding