首页 文章

在iCal文件中编码换行符

提问于
浏览
40

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

我继承的原始代码使用带有引用可打印编码的“= 0D = 0A”,这在Outlook中很有用,但在Google日历中却不行 .

规范似乎说你应该使用“\ n”来表示换行符 . 这在Google日历中效果很好,但Outlook只会在其中放置文字“\ n”字符 .

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

7 回答

  • 6

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

    正确的方法是使用“\ n”来换行 . Outlook没有认识到这一点,因为我在描述中有“ENCODING = quoted-printable” . 删除后,Outlook正确显示了新行 .

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

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

  • 26

    上面原帖中Matthew Bucket链接到RFC的评论帮助了我 . 引自那里:

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

    所以,我做了一个

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

    它起作用了

  • 2

    可能值得说你需要文字\ n,而不是换行符号,字面上反斜杠然后在ical中 . 另外别忘了75字符“折叠” .

  • 0

    你的输出文件应该如下---

    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/

    谢谢,巴斯卡

  • 36

    这是我对 DESCRIPTION 的回答

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

    我不得不转义字符串中的输出以在输出文件中设置文字“\ n” . 像这样 . 工作了一个魅力 .

    $events .= "DESCRIPTION:" . str_replace("\n","\\n",str_replace(";","\;",str_replace(",",'\,',get_event_contents()))) . "\n";
    
  • 0

    根据this RFC

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

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

相关问题