我试图弄清楚如何在 iCal 文件的说明部分中对换行符进行编码,以便它们可以正确导入 Outlook、Google 日历和 Apple 日历。
我继承的原始代码使用“=0D=0A”和带引号的可打印编码,在 Outlook 中效果很好,但在 Google 日历中效果不佳。
规范似乎说您应该使用 "\n" 来表示换行符。这在 Google 日历中效果很好,但 Outlook 只是将文字“\n”字符放在那里。
有没有一种方法可以在日历系统中始终如一地工作?
我试图弄清楚如何在 iCal 文件的说明部分中对换行符进行编码,以便它们可以正确导入 Outlook、Google 日历和 Apple 日历。
我继承的原始代码使用“=0D=0A”和带引号的可打印编码,在 Outlook 中效果很好,但在 Google 日历中效果不佳。
规范似乎说您应该使用 "\n" 来表示换行符。这在 Google 日历中效果很好,但 Outlook 只是将文字“\n”字符放在那里。
有没有一种方法可以在日历系统中始终如一地工作?
好的,看起来我正在回答我自己的问题。
正确的做法是使用“\n”作为换行符。Outlook 无法识别这一点,因为我在描述中有“ENCODING=quoted-printable”。一旦我删除它,Outlook 就会正确显示新行。
此外,要让文件在 Apple iCal 中正确打开,您需要使用“VERSION:2.0”作为文件版本。如果您使用“VERSION:1.0”,它会告诉您它无法读取文件(即使它符合 1.0 规范)。
注意:正如其他人所提到的,该文件实际上必须包含文字 string \n
。由于大多数语言将其视为表示换行符的转义序列,因此您可能需要\\n
在代码中使用该字符串。
原始帖子中来自 Matthew Bucket 的 RFC 链接的评论帮助了我。从那里引用:
“TEXT”属性值中的 BACKSLASH 字符必须用另一个 BACKSLASH 字符转义
所以,我做了一个
$description = str_replace("\r\n", "\\n", $description);
它奏效了
可能值得一提的是,您需要文字 \n,而不是换行符,字面上是反斜杠,然后是 ical 中的 n。也不要忘记做 75 个字符的“折叠”。
您的输出文件应如下所示---
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
谢谢,巴斯卡
这是我的答案DESCRIPTION
$filev = str_replace("\r\n", '\\n', $p);
$filev = str_replace("<br>",'\\n',$filev);
$filev = (str_replace(";","\;",str_replace(",",'\,',$filev)));
我必须转义字符串中的输出以在输出文件中设置文字“\n”。像这样。发挥了魅力。
$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";
=0D=0A
适用于 Outlook,但您需要更改DESCRIPTION
密钥,以便可以解释换行符。
DESCRIPTION;ENCODING=QUOTED-PRINTABLE:
在冒号后输入文本,=0D=0A
用于换行。Outlook 将正确读取换行符。\\n
仅当您DESCRIPTION
不使用ENCODING:QUOTED-PRINTABLE
.
我正在使用VERSION:2.0