[CFWS] 和 [FWS] 在这个 ABNF 中是什么意思?

Pri*_*a R 9 email validation abnf

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

quoted-string   =       [CFWS]
                        DQUOTE *([FWS] qcontent) [FWS] DQUOTE
                        [CFWS]
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索,发现 CFWS 是 Comments, Folding, Whitespaces。我知道空格是什么,但不知道电子邮件地址中的 ABNF 中的注释和折叠是什么。

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

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

Mar*_*ery 10

这不是通用 ABNF 语法的一部分(目前在RFC 5234 中定义,尽管在编写 RFC 2282 时RFC 2234是 ABNF 的定义)。相反,FWSCFWS是(参见RFC电子邮件本身定义的特殊记号3.2.3节RFC 2822,或第3.2.2节RFC 5322,这在2008年废弃RFC 2822)。

来自 RFC 5322:

2.2.3. 长标题字段

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

例如,头字段:

Subject: This is a test
Run Code Online (Sandbox Code Playgroud)

可以表示为:

Subject: This
 is a test
Run Code Online (Sandbox Code Playgroud)

...

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

...

3.2.2. 折叠空白和注释

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

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

本规范中有几个地方可以自由插入注释和 FWS。为了适应这种语法,为“CFWS”定义了一个额外的标记,用于评论和/或 FWS 可以出现的地方。但是,在本规范中出现 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
Run Code Online (Sandbox Code Playgroud)

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

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

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