- 追加された行はこの色です。
- 削除された行はこの色です。
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