アンテナサイト padmantenna には、さくらのレンタルサーバの障害情報 RSS を「メンテナンス」と「障害」とに分け、時系列にソートし直したものを(勝手にこさえて)含んでいるのですが、今日突如として表示されなくなってしまいました。 そもそも非公認の代物なのでどうということはないんですけど、そもそもどういう不具合なのか調べてみましたらパースエラーなのでありました。
<lastbuilddate>Thu, 13 Apr 23 03:58:01 +0900</lastBuildDate> <pubdate>Thu, 13 Apr 23 03:58:01 +0900</pubDate>
問題箇所の一部がこれ。 XML では開始タグと終了タグは大文字小文字を区別して同じでなければならないのですが、開始タグの大文字が小文字に変換されているという、ちょっと理解し難いことになってるんでした。
PHP のバージョンのせいなのかと思い、現状の 8.0.x 系と 7.x 系とで試してみたら小文字に変換されてしまう。 ローカルのテスト環境(8.2.x 系)では変換されない。 一体どういうことなんですかっていう話なんですよね。
だったら </lastBuildDate> を </lastbuilddate> とすればいいじゃんって思ったりもしましたが、上記 XML の仕様的にいってもなんにしてもパースエラーになるんですなぁ。 いや、パースエラーというか、単にキーがありませんってなっちゃう。
今日は朝からこんなしょうもないことであれこれ悩んでいたんですが、よくよく考えてみると、タグの大文字小文字に厳密な XML としてそもそも出力してるんですかアナタ?っていうことなんですよね。 なので出力前に
header('Content-Type: application/rss+xml; charset=utf-8');
Content-Type ヘッダーを出力するようにしました。 これで解決しましたです。