можно/нужно ли экранировать параметры свойств iCal?

в частности, параметр CN (общее имя), например.

ОРГАНИЗАТОР;CN=John Doe,Eng:mailto:[email protected]

RFC расплывчато по этому поводу, ИМХО. Насчет значений свойств типа TEXT все ясно, но для этого параметра просто указано "Значение параметра - текст". В любом случае экранирование, указанное для типа TEXT, не кажется полным для значений параметров (например, ':' не экранировано).

большое спасибо!


person davka    schedule 10.06.2010    source источник


Ответы (1)


Давка,

Да, значения параметров можно экранировать, заключив значение в двойные кавычки. Значения параметров должны быть экранированы, если они содержат любой из следующих символов:

; - semicolon
: - colon
, - comma

Использование символа двойной кавычки " внутри значений параметров является незаконным, поэтому их следует удалить (или иным образом удалить из значения параметра).

Итак, в приведенном выше примере правильное экранирование таково:

ORGANIZER;CN="John Doe,Eng":mailto:[email protected]

Обратите внимание, что как только встречается первое двоеточие (без кавычек) :, механизмы синтаксического анализа рассматривают остальные как значение свойства. Допустимо использовать символ двоеточия : внутри значений свойств, поэтому двоеточие в mailto:[email protected] не нужно экранировать.

Мы можем разбить строку на части:

  • ORGANIZER - имя свойства
  • ; - разделитель параметров
  • CN - имя параметра
  • = - разделитель значения параметра
  • "John Doe,Eng" - значение параметра
  • : - разделитель значения свойства
  • mailto:[email protected] - значение свойства

Вот цитата из раздела 3.2 RFC 5545, которая объясняет, когда значения параметров заключены в двойные кавычки, и говорит нам, что двойные кавычки недопустимы в значениях параметров:

Значения параметров свойства, которые содержат разделители символов COLON, SEMICOLON или COMMA, ДОЛЖНЫ быть указаны как текстовые значения в кавычках. Значения параметров свойств НЕ ДОЛЖНЫ содержать символ DQUOTE. Символ DQUOTE используется в качестве разделителя для значений параметров, которые содержат запрещенные символы или текст URI. Например:

DESCRIPTION;ALTREP="cid:[email protected]":Конференция Wild Wizards Fall'98 - - Лас-Вегас\, Невада\, США

Важно отметить, что технически параметры могут содержать несколько значений. Запятая используется для разделения этих нескольких значений:

(из раздела 3.2.11 RFC 5545:)

ATTENDEE;MEMBER="mailto:[email protected]","mailto:pr
 [email protected]":mailto:[email protected]

Не все механизмы iCalendar будут принимать несколько значений для всех параметров, но следующие параметры ДОЛЖНЫ разрешать несколько значений (согласно RFC):

  • ЧЛЕН
  • ДЕЛЕГИРОВАННЫЙ ОТ
  • ДЕЛЕГИРОВАННЫЙ

С уважением,

-Дуг

person Doug    schedule 10.08.2010
comment
Нет проблем - рад, что смог помочь :) - person Doug; 12.08.2010
comment
Я не мог заставить работать запятую в Outlook 2013 и просто указал несколько строк ATTENDEE. - person Daniel Sokolowski; 15.10.2014
comment
Ага, так задумано. Подход с запятыми заключается в предоставлении нескольких псевдонимов для одного и того же человека (т. е. человека с несколькими адресами электронной почты). - person Doug; 26.11.2014
comment
Согласно RFC6868, вы можете перейти к ^', так что теперь использование двойных кавычек внутри значений параметров больше не является незаконным. - person Star Brilliant; 28.10.2019
comment
Спасибо, сэр!!! - person darkhipo; 29.01.2021