1

我需要解析 vCard 2.1 Name 属性。

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

单个文本组件可以包括多个文本值(例如,多个附加名称),由逗号字符(ASCII 十进制 44)分隔。

但在 vCard 2.1 中,每个组件似乎只能有一个值。即使可能至少附加名称(第三个字段)可以包含逗号。

vCard 2.1 Name 属性可以在姓氏、名字、附加名称、名称前缀和名称后缀字符串中使用逗号吗?这应该被视为 vCard 3.0 和 4.0 中的“多个文本值”吗?

4

1 回答 1

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 中的多个值。

于 2014-01-15T22:07:05.540 回答