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

时间:2010-06-10 12:06:11

标签: parsing icalendar vcalendar rfc5545 vcal

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

  

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

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

非常感谢!

1 个答案:

答案 0 :(得分:17)

Davka,

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

; - semicolon
: - colon
, - comma

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

所以,通过上面的例子,正确的转义是这样的:

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

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

我们可以打破它的部分:

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

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

  

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

     

说明; ALTREP = “CID:part1.0001@example.org”:本   Fall'98 Wild Wizards Conference - -   拉斯维加斯\,内华达州,美国

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

(来自RFC 5545的第3.2.11节):

ATTENDEE;MEMBER="mailto:projectA@example.com","mailto:pr
 ojectB@example.com":mailto:janedoe@example.com

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

  • MEMBER
  • DELEGATED-FROM
  • DELEGATED-TO

此致

-Doug