RIGHT:&size(12){Category:[[:Plugin]],[[RSS>:Category/RSS]]}; * RSS 出力について [#e40c180c] - ページ: [[BugTrack2]] - 投稿者: 名無しさん - 優先順位: 普通 - 状態: 却下 - カテゴリー: プラグイン - 投稿日: 2009-10-17 (土) 01:12:31 - バージョン: ** メッセージ [#s23c504b] 出力されたRSS データを利用しようとすると、問題が出る場面があったので挙げておきます。 :RSS 1.0 出力で表示されるタイムゾーンが、サーバーのローカルタイム基準になっている| $date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0); として更新時刻の文字列を作成しているが、フォーマットオプション'O' が返す値はサーバーのローカルタイムと基準時との時差です。 もし、ZONETIME にLOCALZONE と違う値を設定すると、日時はZONETIME を基準に、タイムゾーンはLOCALZONE を基準にしたものになってしまい、RSS リーダーなどで読み取ると正しい時刻に変換されません。 :Firefox 3.5.3 のRSS リーダーでは、RSS 2.0 の<pubDate> のデータを表示しないことがある| 自分のところだけかもしれませんが、Firefox 3.5.3 でPukiWiki のRSS 2.0 を表示させた((補足: Content-Type ヘッダをapplication/rss+xml に変える事で、表示させています)) ところ、更新時刻が表示されていませんでした。 いろいろ試してみたところ、タイムゾーンが'JST' では表示されず、'+0900' では表示されていました。 [[BugTrack2/249]] で話題になっているRFC2822 に早く対応しろ、ってことなんでしょうか・・・ とりあえず、なパッチです -[[cvs:plugin/rss.inc.php]] (r1.21) --35 行目あたり $lang = LANG; $page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING); $self = get_script_uri(); + switch ($version) { + case '0.91': /* FALLTHROUGH */ + case '2.0': + $zone = (ZONETIME < 0) ? '-' : '+'; + $zone .= sprintf('%02d%02d', floor(abs(ZONETIME) / 60 / 60), abs(ZONETIME) / 60 % 60); + break; + case '1.0': /* FALLTHROUGH */ + $zone = (ZONETIME < 0) ? '-' : '+'; + $zone .= sprintf('%02d:%02d', floor(abs(ZONETIME) / 60 / 60), abs(ZONETIME) / 60 % 60); + break; + } // Creating <item> or <entry> $items = $rdf_li = ''; --45 行目あたり switch ($version) { case '0.91': /* FALLTHROUGH */ case '2.0': - $date = get_date('D, d M Y H:i:s T', $time); + $date = get_date('D, d M Y H:i:s ', $time) . $zone; $date = ($version == '0.91') ? ' <description>' . $date . '</description>' : ' <pubDate>' . $date . '</pubDate>'; $items .= <<<EOD --65 行目あたり case '1.0': // Add <item> into <items> $rdf_li .= ' <rdf:li rdf:resource="' . $self . '?' . $r_page . '" />' . "\n"; - $date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0); + $date = get_date('Y-m-d\TH:i:s', $time) . $zone; $items .= <<<EOD <item rdf:about="$self?$r_page"> <title>$title</title> -------- #comment