我需要解析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中的“多个文本值”?
答案 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中的多个值。