.girl文件中的str_replace无法正常工作

时间:2018-04-19 07:07:41

标签: php icalendar

我尝试过几种不同的方法,似乎无法让它们中的任何一种工作。在我的网站上,我有一个区域来创建约会(下面的屏幕截图)。约会描述正确地发布到数据库。创建约会后,将.ics文件通过电子邮件发送给设置约会的任何人。 .ics文件包含所有行,但换行符不会进入Outlook约会,因此它只显示第一行。我已经尝试过如下所示使用str_replace,但它似乎没有用。

编辑:我得到了\ n进入.ics文件,但Outlook除第一行外仍然没有显示任何内容。

screenshot

添加约会模式的屏幕截图

Create Appointment

来自.ics文件的Outlook约会的屏幕截图

Outlook Appointment

记事本中.ics文字的屏幕截图

.ics Text Output

用于创建.ics文件的相关.php代码

$appNote = str_replace("\r\n", "\\n", $_POST['appNote']);
$appNote = htmlspecialchars($appNote, ENT_QUOTES);

$ical_content = "BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 16.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VTIMEZONE"
.$adtimezone."
END:VTIMEZONE
BEGIN:VEVENT
CREATED:".$createdDate."
DESCRIPTION:".$appNote."
DTEND;TZID=\"".$appTimeZone."\":".$endDateTime."
DTSTAMP:".$createdDate."
DTSTART;TZID=\"".$appTimeZone."\":".$startDateTime."
LAST-MODIFIED:".$createdDate."
LOCATION:".$appLocation."
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=en-us:".$appSubject." - ".$clientusername."
".$reminderinfo;


$ical_content = "BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 16.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VTIMEZONE"
.$adtimezone."
END:VTIMEZONE
BEGIN:VEVENT
CREATED:".$createdDate."
DESCRIPTION:".$appNote."
DTEND;TZID=\"".$appTimeZone."\":".$endDateTime."
DTSTAMP:".$createdDate."
DTSTART;TZID=\"".$appTimeZone."\":".$startDateTime."
LAST-MODIFIED:".$createdDate."
LOCATION:".$appLocation."
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=en-us:".$appSubject." - ".$clientusername."
".$reminderinfo;

1 个答案:

答案 0 :(得分:0)

根据iCalendar规范,您需要在每一行之后回车和换行,即" \ r \ n"。您还缺少必需的UID项,并且需要包装长度超过75个字符的行。

您可能需要考虑使用能够为您完成所有这些工作的PHP库。您还应该使用icalendar.org之类的验证程序检查生成的iCalendar文件,以确保它是有效文件,这样可以提高文件成功导入的可能性。