可以/应该转发iCal属性参数吗?

dav*_*vka 11 icalendar parsing vcalendar vcal rfc5545

具体而言,CN(通用名称)参数,例如

ORGANIZER; CN = John Doe,Eng:mailto:jd@some.com

恕我直言,RFC对此很模糊.它是关于非常明确的属性值类型文本,但此参数,它只是说" 参数值是文本 ".无论如何,为TEXT类型指定的转义对于参数值似乎不完整(例如,':'未被转义).

非常感谢!

Dou*_*oug 18

Davka,

是的,参数值可以通过用双引号括起来转义.如果参数值包含以下任何字符,则必须对其进行转义:

; - semicolon
: - colon
, - comma
Run Code Online (Sandbox Code Playgroud)

"在参数值中包含双引号字符是非法的,因此应删除它们(或以其他方式从参数值中删除).

因此,使用上面的示例,正​​确的转义是这样的:

ORGANIZER;CN="John Doe,Eng":mailto:jd@some.com
Run Code Online (Sandbox Code Playgroud)

请注意,一旦:遇到第一个(未引用的)冒号,解析引擎会将其余部分视为属性值.:在属性值中使用冒号字符是合法的,因此mailto:jd@some.com不需要对冒号进行转义.

我们可以打破它的部分:

  • ORGANIZER - 财产名称
  • ; - 参数分隔符
  • CN - 参数名称
  • = - 参数值分隔符
  • "John Doe,Eng" - 参数值
  • : - 属性值分隔符
  • mailto:jd@some.com - 适当的价值

这是RFC 5545第3.2节引用的一个引用,它解释了参数值何时用双引号括起来,并告诉我们双引号在参数值中是非法的:

包含COLON,SEMICOLON或COMMA字符分隔符的属性参数值必须指定为带引号的字符串文本值.属性参数值绝不能包含DQUOTE字符.DQUOTE字符用作包含受限字符或URI文本的参数值的分隔符.例如:

描述; ALTREP ="cid:part1.0001@example.org":Fall'98 Wild Wizards Conference - - Las Vegas \,NV \,USA

重要的是要注意参数在技术上可以包含多个值.逗号用于分隔这些多个值:

(来自RFC 5545的第3.2.11节:)

ATTENDEE;MEMBER="mailto:projectA@example.com","mailto:pr
 ojectB@example.com":mailto:janedoe@example.com
Run Code Online (Sandbox Code Playgroud)

并非所有iCalendar引擎都会接受所有参数的多个值,但以下参数应该允许多个值(根据RFC):

  • 会员
  • DELEGATED-FROM
  • DELEGATED-TO

问候,

-Doug