9

电子邮件的RFC 2282具有以下 ABNF 用于引用字符串。

quoted-string   =       [CFWS]
                        DQUOTE *([FWS] qcontent) [FWS] DQUOTE
                        [CFWS]

我搜索了一下,发现 CFWS 是 Comments、Folding、Whitespaces。我知道空格是什么,但不知道电子邮件地址中的 ABNF 是什么评论和折叠。

还有 *() 内的 [FWS] 是什么意思?双引号可以有 0 次或多次出现的 qcontent,前面有折叠和空格?

这非常令人困惑。了解 ABNF 的参考资料将不胜感激。

4

1 回答 1

11

这不是通用 ABNF 语法的一部分(目前在RFC 5234中定义,尽管在编写 RFC 2282 时RFC 2234是 ABNF 的定义)。相反,FWS并且CFWS是在电子邮件 RFC 本身中定义的特殊令牌(请参阅RFC 2822 的第 3.2.3节,或 RFC 5322 的第 3.2.2 节,它在 2008 年淘汰了 RFC 2822)。

来自 RFC 5322:

2.2.3。长标题字段

每个标题字段在逻辑上是单行字符,包括字段名称、冒号和字段正文。然而,为了方便起见,并处理每行 998/78 个字符的限制,标题字段的字段主体部分可以拆分为多行表示;这称为“折叠”。一般规则是,只要本规范允许折叠空格(不仅仅是 WSP 字符),就可以在任何 WSP 之前插入 CRLF。

例如,标题字段:

Subject: This is a test

可以表示为:

Subject: This
 is a test

...

从标题字段的这种折叠的多行表示移动到其单行表示的过程称为“展开”。展开是通过简单地删除紧随 WSP 的任何 CRLF 来完成的。每个标头字段都应以其展开的形式进行处理,以进行进一步的句法和语义评估。展开的头字段没有长度限制,因此可能是不确定的长。

...

3.2.2. 折叠空白和注释

空格字符,包括折叠中使用的空格(在第 2.2.3 节中描述),可能出现在标题字段正文中的许多元素之间。此外,被视为注释的字符串可以作为括在括号中的字符包含在结构化字段主体中。下面定义了折叠空白 (FWS) 和注释结构。

括在括号中的字符串被视为注释,只要它们不出现在 第 3.2.4 节中定义的“引用字符串”中。评论可能嵌套。

本规范中有几个地方可以自由插入注释和 FWS。为了适应这种语法,为可能出现注释和/或 FWS 的地方定义了一个附加的“CFWS”标记。但是,在本规范中出现 CFWS 的地方,它不能以这样一种方式插入,即折叠头字段的任何行都完全由 WSP 字符组成,而没有其他任何内容。

FWS             =   ([*WSP CRLF] 1*WSP) /  obs-FWS
                                       ; Folding white space

ctext           =   %d33-39 /          ; Printable US-ASCII
                    %d42-91 /          ;  characters not including
                    %d93-126 /         ;  "(", ")", or "\"
                    obs-ctext

ccontent        =   ctext / quoted-pair / comment

comment         =   "(" *([FWS] ccontent) [FWS] ")"

CFWS            =   (1*([FWS] comment) [FWS]) / FWS

在整个规范中,FWS(折叠空白标记)出现的地方,它表示折叠的地方,如 第 2.2.3 节中所讨论的那样。无论折叠出现在消息中的何处(即,包含 CRLF 后跟任何 WSP 的标头字段主体),在根据本规范对该标头字段执行任何进一步的语义分析之前执行展开(删除 CRLF)。也就是说,任何出现在 FWS 中的 CRLF 在语义上都是“不可见的”。

注释通常用于结构化字段正文中,以提供一些人类可读的信息文本。由于允许评论包含 FWS,因此允许在评论中折叠。另请注意,由于注释中允许引用对,因此括号和反斜杠字符可能会出现在注释中,只要它们以引用对的形式出现。从语义上讲,括号不是注释的一部分;注释是包含在两个括号之间的内容。如前所述,注释中出现的任何引用对中的 "" 和任何 FWS 中的 CRLF 在语义上是“不可见的”,因此也不是注释的一部分。

在结构化标题字段中的词法标记之间发生的 FWS、注释或 CFWS 运行在
语义上被解释为单个空格字符。

于 2017-02-12T21:22:33.557 回答