13

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

组织者;CN=John Doe,Eng:mailto:jd@some.com

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

多谢!

4

1 回答 1

20

达夫卡,

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

; - semicolon
: - colon
, - comma

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

所以,对于你上面的例子,正确的转义是这样的:

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

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

我们可以把这条线分成几个部分:

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

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

包含冒号、分号或逗号字符分隔符的属性参数值必须指定为带引号的字符串文本值。属性参数值不得包含 DQUOTE 字符。DQUOTE 字符用作包含受限字符或 URI 文本的参数值的分隔符。例如:

描述;ALTREP="cid:part1.0001@example.org":98 秋季狂野巫师大会 - - 美国内华达州拉斯维加斯

请务必注意,参数在技术上可以包含多个值。逗号用于分隔这些多个值:

(来自 RFC 5545 的第 3.2.11 节:)

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

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

  • 成员
  • 委托人
  • 委托给

问候,

-道格

于 2010-08-10T22:38:01.480 回答