Кодирование новых строк в файлах iCal - PullRequest
43 голосов
/ 20 марта 2009

Я пытаюсь выяснить, как кодировать новые строки в части DESCRIPTION файла iCal таким образом, чтобы они правильно импортировались в Outlook, Google Calendar и Apple Calendar.

Исходный код, который я унаследовал, использовал "= 0D = 0A" с кодировкой для печати в кавычках, которая прекрасно работает в Outlook, но не в Календаре Google.

В спецификации говорится, что вы должны использовать "\ n" для представления новой строки. Это прекрасно работает в Календаре Google, но Outlook просто помещает туда буквальные символы "\ n".

Есть ли способ, которым вы сделали это, который будет работать последовательно в календарных системах?

Ответы [ 7 ]

39 голосов
/ 20 марта 2009

ОК, похоже, я отвечаю на свой вопрос.

Правильный способ сделать это - использовать \ n для разрывов строк. Outlook не распознал это, потому что у меня было «ENCODING = quoted-printable» в описании. Как только я удалил это, Outlook правильно отобразил новые строки.

Кроме того, чтобы файл правильно открывался в Apple iCal, необходимо использовать «VERSION: 2.0» для версии файла. Если вы используете «VERSION: 1.0», он скажет вам, что не может прочитать файл (даже если он соответствует спецификации 1.0).

ПРИМЕЧАНИЕ. Как уже упоминалось, файл должен содержать буквальную строку \n. Поскольку большинство языков воспринимают это как escape-последовательность, означающую символ новой строки, вам, вероятно, нужно использовать строку \\n в вашем коде.

29 голосов
/ 03 сентября 2012

Мне помог комментарий со ссылкой на RFC от Matthew Bucket выше в оригинальном посте. Цитата оттуда:

НЕОБХОДИМО, чтобы символ BACKSLASH в значении свойства "TEXT" быть экранированным с другим персонажем BACKSLASH

Итак, я сделал

$description = str_replace("\r\n", "\\n", $description);

и это сработало

21 голосов
/ 09 августа 2011

Может быть стоит сказать, что вам нужен буквальный символ \ n, а не символ новой строки, буквально обратный слеш, затем n в символе. Также не забудьте также выполнить «складывание» из 75 символов.

6 голосов
/ 20 августа 2013

Ваш выходной файл должен быть как ниже ---

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//2013//#Ur Site Name#//EN
BEGIN:VEVENT
UID:[event]2012
DTSTART:20130101T100000
DTEND:20130101T120000
LOCATION:
SUMMARY:#Meeting Title here#
DESCRIPTION:What is realistic for financial services companies to achieve via Social Media channels?    \n\nJoin us on 11th September 2013 at 4pm (BST) where we 
-----bla bla bla ----
END:VEVENT
END:VCALENDAR

Здесь вы должны позаботиться о версии, она должна быть 2.0 и Escape-символ ... \ n (новая строка), точка с запятой (;) и запятая (,). Если вы пишете в .net, тогда должно получиться ... "\\ n", "\\;" и "\\,".

Вы также можете проверить выходной файл на этом сайте ... http://icalvalid.cloudapp.net/

Спасибо, Bhaskar

2 голосов
/ 03 октября 2017

Это мой ответ на DESCRIPTION

$filev = str_replace("\r\n", '\\n', $p);
$filev = str_replace("<br>",'\\n',$filev);
$filev = (str_replace(";","\;",str_replace(",",'\,',$filev)));
1 голос
/ 16 февраля 2018

Согласно этому RFC :

Строки содержимого отделяются разрывом строки, которая является последовательностью CRLF (символ CR и символ LF).

Так что вы должны использовать \r\n. Я использовал это в строках без дополнительной обратной косой черты.

0 голосов
/ 22 марта 2012

Мне пришлось экранировать вывод в строке, чтобы установить литерал "\ n" в выходном файле. Вот так. Сработал брелок.

$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...