Кодирование новых строк в файлах iCal
Я пытаюсь понять, как кодировать новые строки в части DESCRIPTION файла iCal таким образом, чтобы они правильно импортировались в Outlook, Календарь Google и Календарь Apple.
В исходном коде, который я унаследовал, используется "= 0D = 0A" с кодировкой с кавычками, которая отлично работает в Outlook, но не в Календаре Google.
Спектр кажется, что вы должны использовать "\n" для представления новой строки. Это отлично работает в Календаре Google, но Outlook просто помещает буквальные символы "\n".
Есть ли способ, которым вы это сделали, который будет работать последовательно по календарным системам?
Ответы
Ответ 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
. Я использовал это в строках без дополнительного обратного слэша.