我最近正在学习互联网消息格式,最初是RFC2822和RFC5322。我在看折叠空格的定义。
每个标头字段逻辑上是由字段名、冒号和字段体组成的一行字符。不过,为了方便起见,并为了处理每行998/78字符的限制,标题字段的字段体部分可以拆分为多行表示;这称为“折叠”。一般规则是,只要该规范允许折叠空白(而不仅仅是WSP字符),就可以在任何WSP之前插入一个CRLF。例如,header字段: Subject:这是一个测试,可以表示为: Subject:这个是一个测试
规则定义采用ABNF表示法,如下所示:
FWS = (_WSP CRLF 1_WSP) /obs;折叠空白
WSP是一个空格,CRLF是ABNF中的回车和行馈送[]-enclosed可以或不能出现,这不是文本所说的。
规则的定义意味着:
FWS是一个或多个空格,可以选择在前面加上(零或更多空格和回车和行提要)。
这意味着只有一个或多个空格是折叠空格。对吗?
发布于 2018-04-30 15:19:13
规范和您的理解都是正确的,但是规范有点混乱。FWS规则不仅表示折叠空格,还表示可能包含折叠的任何空格。类似地,CFWS规则不仅表示带有折叠空格的注释,还表示允许空白和/或注释和/或折叠的任何位置。
这种组合多个规则的做法在语法中很常见,其中规则显式地编码优先级。例如,一种算术语言可以允许乘法和加法。这可能会被指定为
Addition = Addition "+" Multiplication / Multiplication
Multiplication = Multiplication "*" Number / Number在该示例中,加法不仅匹配加法表达式,还匹配任何文字数字。在引用的RFC中,CFWS类似地允许注释或FWS,FWS允许折叠空格或任何空格--尽管语法使用了一个可选组[...],但它并不能完全清楚地说明这一点。
https://softwareengineering.stackexchange.com/questions/370202
复制相似问题