我需要你的幫助。我正在用php函數編寫一個iCal .ics
文件格式。似乎無法寫出有效的.ics文件?
如果我用iCal打開.ics
文件,它表示應用程序說:「日曆無法讀取此日曆文件,也沒有事件添加到您的日曆中。
但是,如果我使用online .ics validator驗證文件,它說除了line endings
之外,一切都應該是正常的。 validator這樣說:
您的日曆正在使用無效的換行格式。確保使用 \ r \ n結束行而不僅僅是\ n(RFC 2445§4.1)。 恭喜;您的日曆已通過驗證!
但我不確定這是否是真正的問題,爲什麼我的iCal無法讀取文件。 首先,我不知道如何改變這條線的結局?
<?php
function wpse63611_events_feed_output(){
$filename = urlencode('My-Events-' . date('Y') . '.ics');
// Start collecting output
ob_start();
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename=' . $filename);
header('Content-type: text/calendar');
header("Pragma: 0");
header("Expires: 0");
?>
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//<?php get_bloginfo('name'); ?>//NONSGML Events //EN
CALSCALE:GREGORIAN
X-WR-CALNAME:<?php echo get_bloginfo('name');?> - Events
<?php
if (have_posts()):
$now = new DateTime();
$datestamp =$now->format('Ymd\THis\Z');
while(have_posts()): the_post();
global $post;
$uid = md5(uniqid(mt_rand(), true))."@mydomain.com";
$start = unixToiCal(get_event_date($post, true, true), 2.0);
$end = unixToiCal(get_event_end_date($post, true, true), 2.0);
$summary = wpse63611_esc_ical_text(get_the_title());
$description = apply_filters('the_excerpt_rss', get_the_content());
$description = wpse63611_esc_ical_text($description); ?>
BEGIN:VEVENT
UID:<?php echo $uid; ?>
<?php echo "\r\n"; ?>
DTSTAMP:<?php echo $datestamp; ?>
<?php echo "\r\n"; ?>
DTSTART:<?php echo $start; ?>
<?php echo "\r\n"; ?>
DTEND:<?php echo $end; ?>
<?php echo "\r\n"; ?>
SUMMARY:<?php echo $summary; ?>
<?php echo "\r\n"; ?>
DESCRIPTION:<?php echo $description; ?>
<?php echo "\r\n"; ?>
END:VEVENT
<?php endwhile; endif; ?>
END:VCALENDAR
<?php
// Collect output and echo
$eventsical = ob_get_contents();
ob_end_clean();
echo $eventsical;
exit();
}
function unixToiCal($uStamp = 0, $tzone = 0.0) {
$uStampUTC = $uStamp + ($tzone * 3600);
$stamp = date("Ymd\THis\Z", $uStampUTC);
return $stamp;
}
function wpse63611_esc_ical_text($text='') {
$text = str_replace("\\", "", $text);
$text = str_replace("\r", "\r\n ", $text);
$text = str_replace("\n", "\r\n ", $text);
return $text;
}
?>
你能看到這個問題嗎?什麼可能導致日曆不起作用?
UPDATE 嗯,我固定的行結束和日曆現在驗證罰款。所以在驗證時沒有錯誤,但我仍然無法在iCal中使用它。當我打開它時仍然表示日曆文件不可讀。這裏是我的腳本生成的實際文件... http://cl.ly/383D3M3q3P32
你有沒有嘗試過用正確的行結尾? – TZHX
那麼,行結局不是問題!我修復了行結尾,但該文件仍然無效!我更新了我的問題。 – matt
修復問題時,請不要編輯問題,使當前答案無效。如果還有其他問題,請創建一個新問題。 –