FAQ: CalDav (Яндекс и др.) — HTML-теги в описании событий¶
Тип: FAQ для поддержки Источник тикетов: «Яндекс CalDav: HTML теги в поле "описание"…»
1. Симптомы¶
Пользователь жалуется:
- «В Яндекс.Календаре в описании события видны HTML-теги (<p>, <br>, <b>)»
- «При синхронизации через CalDav описание превращается в нечитаемый HTML-код»
- «В 1Форме описание красиво, а в стороннем календаре — с тегами»
2. Почему так происходит¶
Техническая причина¶
- В 1Форме описание события хранится в формате HTML (
BodyType = HTML) - При экспорте через CalDav/ICS описание записывается в поле
DESCRIPTIONбез конвертации HTML → текст - По стандарту RFC 5545 поле
DESCRIPTION— это plain text - Сторонние календари (Яндекс, 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 Builderdocs/domains/calendar/data-flow.md— цепочка синхронизацииadmin.md— настройка Exchange