Как кодировать новые строки в значениях параметров vCard 4.0: ^n или \n?

В vCard 4.0 RFC 6350 говорится, что новые строки в значениях параметров свойств должны быть закодированы. как \n (по крайней мере, для параметра LABEL свойства ADR):

  The property can also include a "LABEL" parameter to present a
  delivery address label for the address.  Its value is a plain-text
  string representing the formatted address.  Newlines are encoded
  as \n, as they are for property values.


  ADR;GEO="geo:12.3457,78.910";LABEL="Mr. John Q. Public, Esq.\n
  Mail Drop: TNE QB\n123 Main Street\nAny Town, CA  91921-1234\n
  U.S.A.":;;123 Main Street;Any Town;CA;91921-1234;U.S.A.

Однако vCard 4.0 RFC 6350 обновлен 'Кодирование значений параметров в iCalendar и vCard' RFC 6868, в котором говорится:

  formatted text line breaks are encoded into ^n (U+005E, U+006E)

  GEO;X-ADDRESS="Pittsburgh Pirates^n115 Federal St^nPitt
  sburgh, PA 15212":geo:40.446816,-80.00566
  being used

Как кодировать новые строки в значениях параметров vCard 4.0 как \n или как ^n?


person IT Hit WebDAV    schedule 11.12.2013    source источник


Ответы (1)


Посмотрите на реальную грамматику:

param-value = *SAFE-CHAR / DQUOTE *QSAFE-CHAR DQUOTE

vCard/iCalendar (к сожалению) не поддерживает общее экранирование в значениях атрибутов свойств. Как упоминалось в RFC 6868:

Механизм \-экранирования, используемый для текстовых значений свойств, не определен для использования со значениями параметров.

(в этом весь смысл RFC 6868).

LABEL особенный и явно указан для поддержки \n:

Свойство также может включать параметр «LABEL», чтобы представить метку адреса доставки для адреса. Его значение представляет собой текстовую строку, представляющую отформатированный адрес. Новые строки кодируются как \n, как и для значений свойств.

Это только для LABEL.

Чтобы ответить на ваш вопрос: «Как мне кодировать новые строки в значениях параметров vCard 4.0 как \n или как ^n?»

Сначала вы посмотрите, задано ли значение параметра особым образом, например LABEL. Если это так, закодируйте его, как описано для параметра. Если это не так, закодируйте его через ^.

person hnh    schedule 27.02.2014