Перейти к содержанию

FAQ: CalDav (Яндекс и др.) — HTML-теги в описании событий

Тип: FAQ для поддержки Источник тикетов: «Яндекс CalDav: HTML теги в поле "описание"…»

1. Симптомы

Пользователь жалуется: - «В Яндекс.Календаре в описании события видны HTML-теги (<p>, <br>, <b>)» - «При синхронизации через CalDav описание превращается в нечитаемый HTML-код» - «В 1Форме описание красиво, а в стороннем календаре — с тегами»

2. Почему так происходит

Техническая причина

  1. В 1Форме описание события хранится в формате HTML (BodyType = HTML)
  2. При экспорте через CalDav/ICS описание записывается в поле DESCRIPTION без конвертации HTML → текст
  3. По стандарту RFC 5545 поле DESCRIPTION — это plain text
  4. Сторонние календари (Яндекс, Google, Apple) интерпретируют содержимое DESCRIPTION как обычный текст → HTML-теги отображаются «как есть»

Цепочка в коде

DefaultCalendarEvent.TextBody (HTML)
    → CalDavEventExtentions: calEvent.Description = calendarEvent.TextBody?.Trim()
        → Event.cs: wrtr.Property("DESCRIPTION", Description?.Replace("\n","\\n"))
            → ICS файл: DESCRIPTION:<html tags visible>

Никакой HTML-обработки между этапами нет — только trim и экранирование newline.

Exchange — исключение

Провайдер Exchange (ExchangeCalendarProvider) использует ProcessHtml() для очистки HTML-обёрток, но это внутренняя очистка для обмена с Exchange, а не конвертация в plain text для ICS.

3. Ответ клиенту

Это известное ограничение: при синхронизации через CalDav описание события передаётся в формате, который сторонние календари (Яндекс, Google) показывают с HTML-тегами. Формат CalDav (ICS/RFC 5545) не поддерживает форматированный текст в поле Description.

Для корректного отображения рекомендуется использовать текстовые описания без форматирования, либо Exchange-интеграцию (которая обрабатывает HTML отдельно).

4. Обходные решения

Решение Применимость
Использовать Exchange вместо CalDav Если инфраструктура поддерживает Exchange
Не использовать HTML-форматирование в описании встречи Если допустимо для бизнеса
Ожидать доработку (конвертация HTML → plain text при ICS-экспорте) Потенциальная задача на бэклог

5. Что запросить у клиента

  • Скриншот описания в 1Форме и в стороннем календаре
  • Название стороннего клиента (Яндекс, Google, Apple, Thunderbird)
  • ID встречи/события

6. Когда эскалировать

  • Если описание повреждено (не просто теги, а потеря данных) → L3
  • Если запрос на доработку (strip HTML при CalDav-экспорте) → оформить задачу в бэклог

7. Связанные документы

  • docs/domains/calendar/backend.md — CalDav провайдеры, ICS Builder
  • docs/domains/calendar/data-flow.md — цепочка синхронизации
  • admin.md — настройка Exchange