57

我试图弄清楚如何在 iCal 文件的说明部分中对换行符进行编码,以便它们可以正确导入 Outlook、Google 日历和 Apple 日历。

我继承的原始代码使用“=0D=0A”和带引号的可打印编码,在 Outlook 中效果很好,但在 Google 日历中效果不佳。

规范似乎说您应该使用 "\n" 来表示换行符。这在 Google 日历中效果很好,但 Outlook 只是将文字“\n”字符放在那里。

有没有一种方法可以在日历系统中始终如一地工作?

4

8 回答 8

58

好的,看起来我正在回答我自己的问题。

正确的做法是使用“\n”作为换行符。Outlook 无法识别这一点,因为我在描述中有“ENCODING=quoted-printable”。一旦我删除它,Outlook 就会正确显示新行。

此外,要让文件在 Apple iCal 中正确打开,您需要使用“VERSION:2.0”作为文件版本。如果您使用“VERSION:1.0”,它会告诉您它无法读取文件(即使它符合 1.0 规范)。

注意:正如其他人所提到的,该文件实际上必须包含文字 string \n。由于大多数语言将其视为表示换行符的转义序列,因此您可能需要\\n在代码中使用该字符串。

于 2009-03-20T17:59:28.573 回答
36

原始帖子中来自 Matthew Bucket 的 RFC 链接的评论帮助了我。从那里引用:

“TEXT”属性值中的 BACKSLASH 字符必须用另一个 BACKSLASH 字符转义

所以,我做了一个

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

它奏效了

于 2012-09-03T13:39:37.783 回答
23

可能值得一提的是,您需要文字 \n,而不是换行符,字面上是反斜杠,然后是 ical 中的 n。也不要忘记做 75 个字符的“折叠”。

于 2011-08-08T20:34:25.613 回答
10

您的输出文件应如下所示---

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", "\\;" 和 ”\\,”。

您也可以在此站点上检查您的输出文件... https://icalendar.org/validator.html

谢谢,巴斯卡

于 2013-08-20T06:39:20.613 回答
4

根据这个 RFC

内容行由换行符分隔,换行符是一个 CRLF 序列(CR 字符后跟 LF 字符)。

所以你应该使用\r\n. 我在字符串中使用了它,没有额外的反斜杠转义。

于 2018-02-16T12:14:12.373 回答
2

这是我的答案DESCRIPTION

$filev = str_replace("\r\n", '\\n', $p);
$filev = str_replace("<br>",'\\n',$filev);
$filev = (str_replace(";","\;",str_replace(",",'\,',$filev)));
于 2017-10-03T19:04:04.877 回答
0

我必须转义字符串中的输出以在输出文件中设置文字“\n”。像这样。发挥了魅力。

$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";
于 2012-03-22T19:51:07.677 回答
0

=0D=0A适用于 Outlook,但您需要更改DESCRIPTION密钥,以便可以解释换行符。

DESCRIPTION;ENCODING=QUOTED-PRINTABLE:

在冒号后输入文本,=0D=0A用于换行。Outlook 将正确读取换行符。\\n仅当您DESCRIPTION不使用ENCODING:QUOTED-PRINTABLE.

我正在使用VERSION:2.0

于 2022-03-03T21:29:12.097 回答