vCard 2.1 Name属性可以在其组件中使用逗号吗?

时间:2014-01-14 03:29:27

标签: parsing vcard carddav

我需要解析vCard 2.1 Name属性。

在vCard 3.0和4.0中,Name属性的每个组件都可以有多个值。例如RFC 2426明确指出:

  

个别文字      组件可包括多个文本值(例如,多个      其他名称)由COMMA字符分隔(ASCII十进制      44)。

但在vCard 2.1中看起来每个组件只能有一个值。尽管可能至少附加名称(第三个字段)可以包含逗号。

vCard 2.1名称属性可以在“系列名称”,“名称”,“附加名称”,“名称前缀”和“名称后缀”字符串中具有逗号?是否应将其视为vCard 3.0和4.0中的“多个文本值”?

1 个答案:

答案 0 :(得分:1)

根据2.1规范中的正式BNF定义,不支持组件中以逗号分隔的值列表。 BNF对于不得不逃避逗号字符一无所知。

nameparts   = 0*4(strnosemi ";") strnosemi
; Family, Given, Middle, Prefix, Suffix.
; Example:Public;John;Q.;Reverend Dr.;III, Esq.

strnosemi   = *(*nonsemi ("\;" / "\" CRLF)) *nonsemi
; To include a semicolon in this string, it must be escaped
; with a "\" character.

N属性的一个例子似乎也暗示逗号没有特殊含义。

N:Veni, Vidi, Vici;The Restaurant.

因此,看起来N属性不支持vCard 2.1中的多个值。