Php 电子邮件标题中的特殊字符是什么?何时使用引号?

Php 电子邮件标题中的特殊字符是什么?何时使用引号?,php,email,character-encoding,rfc822,rfc2822,Php,Email,Character Encoding,Rfc822,Rfc2822,我正在尝试使用PHP发送和读取电子邮件。到目前为止,我发现我必须使用函数mb\u encode\u mimeheader()对特殊字符进行编码,但我不必对空格进行编码 我还发现,地址文件中的括号不起作用:(http://stackoverflow.com/questions/11989915/is-there-an-error-in-phps-imap-fetch-overview-function-when-reading-headers-w). 例如,PHP无法从:Admin[]读取标题节,

我正在尝试使用PHP发送和读取电子邮件。到目前为止,我发现我必须使用函数
mb\u encode\u mimeheader()
对特殊字符进行编码,但我不必对空格进行编码

我还发现,地址文件中的括号不起作用:(http://stackoverflow.com/questions/11989915/is-there-an-error-in-phps-imap-fetch-overview-function-when-reading-headers-w). 例如,PHP无法从:Admin[]读取标题节
,但可以从:“Admin[]”
读取标题节

因此,显然括号在邮件头中有特殊的含义(至少对于PHP而言)邮件头中的特殊字符有哪些其含义是什么它们需要在哪里编码/引用?

From: "Admin [=?UTF-8?B?w4PChMODwpbDg8Kc?=]" <user@mail.tld>
例如,尽管主题也是标题的一部分,但PHP在主题中的括号没有问题

看来引号能帮我解决这个问题(http://tools.ietf.org/html/rfc5322#section-3.2.4-我仍然不能100%确定这是PHP的问题还是不正确的邮件头)但是如何使用引号,引号转义了什么?

From: "Admin [=?UTF-8?B?w4PChMODwpbDg8Kc?=]" <user@mail.tld>
信中说:

包含除以下字符以外的字符的字符串 允许在原子中使用引号字符串格式表示,其中 字符被引号包围(DQUOTE,ASCII值34) 人物

那么,我现在是否应该单独“转义/引用”每个角色

From: Admin "[""]" <user@mail.tld>

如果您有RFC2047,那么您最好将整个头编码为RFC2047,并忘记引用

显然,您已经找到了RFC5322,这是关于需要引用什么以及为什么要引用的权威来源。基本上,任何具有电子邮件地址含义的内容,如果不是电子邮件地址的一部分,都需要引用。传统的引用机制是反斜杠和/或双引号,但对于MIME,您可以使用可用的MIME编码轻松地透明地对所有内容进行编码

您提供的链接解释了“atoms”中不允许的字符需要引用。原子中允许的字符列表在上一节中

如果您对照ASCII表进行交叉检查,您将得到

32(空格)不正常
33 !                            好啊
34“不好
35#至$%&38正常
39'到()41不正常
42*至+43正常
44,不好
45-好的
不好
47/通过0123456789 57正常
58:通过;<60不正常
61=正常
62>不好
63?好的
64@不好
65 A至BCD…XYZ 90正常
91[至\]93不正常
94^至u95正常
96`不好
97 a到bcd…xyz{|}~126 OK
不好
在某些上下文中,允许设置“点原子”,即上面加上的点(句号、句点、ASCII 46),而无需引用

有些客户显然在谨慎方面犯了错误(有些客户会简单地将所有内容都用双引号引起来,好像你的真名不是你的真名。这太糟糕了)

我的理解是,如果允许一个原子,则允许使用RFC2047序列,但这意味着它不能与另一个原子相邻。无论如何,我会避开,建议不要尝试在同一个标题中混合引用和RFC2047包装,而不可能弄清楚它们是如何相互作用的(然后可能会发现,你的解释并不是唯一的游戏,要么是因为其他人在理解时犯了错误,要么是因为规范有多种有效的解释)

ALPHA / DIGIT /    ; Printable US-ASCII
                   "!" / "#" /        ;  characters not including
                   "$" / "%" /        ;  specials.  Used for atoms.
                   "&" / "'" /
                   "*" / "+" /
                   "-" / "/" /
                   "=" / "?" /
                   "^" / "_" /
                   "`" / "{" /
                   "|" / "}" /
                   "~"