我需要解析 vCard 2.1 Name 属性。
在 vCard 3.0 和 4.0 中,Name 属性的每个组件都可以有多个值。例如,RFC 2426 明确指出:
单个文本 组件可以包含多个文本值(例如,多个 其他名称),由逗号字符(ASCII 十进制)分隔 (第44页)。
但是在vCard 2.1中,看起来每个组件只能有一个值。即使可能至少其他名称(第三个字段)中可以包含逗号。
vCard 2.1 名称属性是否可以在姓氏、名字、其他名称、名称前缀和名称后缀字符串中包含逗号?这是否应该像 vCard 3.0 和 4.0 中那样被视为"多个文本值"?
根据 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 中的多个值。