我试图找出如何编码的iCal文件的描述部分换行符以这样的方式,他们将正确导入到Outlook,谷歌日历和苹果的日历。

我继承使用“= 0D = 0A”用引用可打印的编码,这在Outlook工作很大,但不是在谷歌日历。原始的代码

该规范似乎是说,你应该使用“\ n”来表示新行。这在谷歌日历的伟大工程,但展望只是把文字“\ n”个字符在那里。

是否有你这样做,将工作持续进行的跨日历系统的方式?

有帮助吗?

解决方案

OK,看起来像我回答我的问题。

做正确的方法是用“\ n”表示换行。展望没有认识到这一点,因为我有“编码=引用可打印”的描述。一旦予移除,Outlook中正确显示的新行。

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

请注意:正如其他人所说,该文件实际上已经包含文字串\n。由于大多数语言对待,作为一个转义序列意味着一个换行符,你可能需要使用字符串\\n在你的代码。

其他提示

与马修桶上方在原岗位的链接RFC的评论帮助了我。从那里引用:

  

在“文本”属性值必须反斜线字符         与另一反斜线字符转义

所以,我做了

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

和它的工作

可能是值得一说的是你需要的文字\ n,而不是换行符号,从字面上反斜线那么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和逃逸字符... \ n(新行),分号(;)和逗号(,)。如果您在使用.NET编写,那么它应该像......“\\ N”,“\\”;和 “\\,”

您可以检查在这个网站你的输出文件,以及... http://icalvalid.cloudapp.net/

谢谢, 巴斯卡尔

这是我的回答为DESCRIPTION

$filev = str_replace("\r\n", '\\n', $p);
$filev = str_replace("<br>",'\\n',$filev);
$filev = (str_replace(";","\;",str_replace(",",'\,',$filev)));

根据这个RFC

  

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

所以,你应该使用\r\n。我用这个串中没有附加反斜杠。

我不得不逃脱该串中的输出在输出文件设置一个文字“\ n”个。像这样。工作一个魅力。

$events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top