Подтвердить что ты не робот

Кодирование новых строк в файлах iCal

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Комментарий со ссылкой на RFC от Мэтью Бакета выше в исходном посте помог мне. Цитата оттуда:

Символ BACKSLASH в значении свойства "ТЕКСТ" ДОЛЖЕН       сбежать с другим символом BACKSLASH

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

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

и он работал

Ответ 3

Возможно, стоит сказать, что вам нужен буквальный \n, а не символ новой строки, буквально обратная косая черта, а затем n в iical. Кроме того, не забудьте сделать также 75 символов "складывания".

Ответ 4

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

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 char...\n (новая строка), точка с запятой (;) и запятая (,). Если вы пишете в .net, тогда ему должно понравиться... "\\n", "\\;" и "\\".

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

Спасибо, Bhaskar

Ответ 5

Это мой ответ для DESCRIPTION

$filev = str_replace("\r\n", '\\n', $p);
$filev = str_replace("<br>",'\\n',$filev);
$filev = (str_replace(";","\;",str_replace(",",'\,',$filev)));

Ответ 6

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

$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";

Ответ 7

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

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

Поэтому вы должны использовать \r\n. Я использовал это в строках без дополнительного обратного слэша.