あなたの助けが必要です。私は.ics
php関数を使ってiCalファイル形式を書いています。
iCalでファイルを開く.ics
と、アプリケーションに「カレンダーはこのカレンダーファイルを読み取ることができません。カレンダーにイベントが追加されていません」と表示されます。
ただし、オンラインの.icsバリデーターを使用してファイルを検証すると、。を除いてすべてが正常であると表示されますline endings
。バリデーターはこれを言います:
カレンダーで無効な改行形式が使用されています。単に\nではなく\r\ nを使用して行を終了するようにしてください(RFC2445§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;
}
?>
これに何か問題がありますか?カレンダーが機能しない原因は何ですか?
更新 まあ、私は行末を修正しました、そしてカレンダーは今うまく検証します。したがって、検証時にエラーは発生しませんが、iCalで動作させることはできません。それを開くと、それでもカレンダーファイルが読み取れないと表示されます。これが私のスクリプトによって生成された実際のファイルです…<ahref="http://cl.ly/383D3M3q3P32"rel="nofollow"> http://cl.ly/383D3M3q3P32