Php 电子邮件标题中的特殊字符是什么?何时使用引号?
我正在尝试使用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[]读取标题节,
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.
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"