我正在试图弄清楚如何在iCal文件的DESCRIPTION部分中编码换行符,以便它们可以正确导入Outlook,Google日历和Apple日历.
我继承的原始代码使用带有引用可打印编码的"= 0D = 0A",这在Outlook中很有用,但在Google日历中却不行.
规范似乎说你应该使用"\n"来表示换行符.这在Google日历中效果很好,但Outlook只会在其中放置文字"\n"字符.
有没有一种方法可以在日历系统中始终如一地工作?
Eri*_*lje 41
好吧,看起来我正在回答我自己的问题.
正确的方法是使用"\n"来换行.Outlook没有认识到这一点,因为我在描述中有"ENCODING = quoted-printable".删除后,Outlook正确显示了新行.
此外,要在Apple iCal中正确打开文件,您需要使用"VERSION:2.0"作为文件版本.如果你使用"VERSION:1.0",它会告诉你它无法读取文件(即使它符合1.0规范).
注意:正如其他人所提到的,文件实际上必须包含文字字符串\n.由于大多数语言将其视为表示换行符的转义序列,因此您可能需要\\n在代码中使用该字符串.
per*_*lis 30
上面原帖中Matthew Bucket链接到RFC的评论帮助了我.引自那里:
"TEXT"属性值中的BACKSLASH字符必须使用另一个BACKSLASH字符进行转义
所以,我做了一个
$description = str_replace("\r\n", "\\n", $description);
Run Code Online (Sandbox Code Playgroud)
它起作用了
小智 6
你的输出文件应该如下---
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
Run Code Online (Sandbox Code Playgroud)
在这里你必须处理版本,它应该是2.0和Escape char ... \n(换行符),分号(;)和逗号(,).如果你在.net上写,那么它应该......"\\n","\\;" 和"\\,".
您也可以在此网站上查看输出文件... http://icalvalid.cloudapp.net/
谢谢,巴斯卡