我正在试图弄清楚如何在iCal文件的DESCRIPTION部分中编码换行符,以便它们可以正确导入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规范).
注意:正如其他人所提到的,文件实际上必须包含文字字符串\n
.由于大多数语言将其视为表示换行符的转义序列,因此您可能需要\\n
在代码中使用该字符串.
上面原帖中Matthew Bucket链接到RFC的评论帮助了我.引自那里:
"TEXT"属性值中的BACKSLASH字符必须使用另一个BACKSLASH字符进行转义
所以,我做了一个
$description = str_replace("\r\n", "\\n", $description);
它起作用了
可能值得说你需要文字\n,而不是换行符号,字面上反斜杠然后在ical中.另外别忘了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","\\;" 和"\\,".
您也可以在此网站上查看输出文件... http://icalvalid.cloudapp.net/
谢谢,巴斯卡