ある WordPress テーマファイルに切り替えたときだけ、RSS フィードが壊れることに気がつきました。結構わかりにくいこの問題、原因は FeedBurner でも文字化けでもなく、PHP ソースの問題でした。
HTML ブラウジング中は気がつかない
IE など Web ブラウザで確認すると、通常の HTML コンテンツをブラウズしている限りは何の問題もないのですが、RSS
文字化けしたり、本来表示されるはずの内容が欠けたりします。Web ブラウザの RSS リーダー機能の実装によっても「壊れ方」が異なるようです。
すわ、FeedBurner の Google への移行がらみか、FeedBurner FeedSmith 自体の賞味期限切れか、なんて可能性も一応考えましたが 、いやいや決めつけてはいけません。
Feed Validator で見ると、確かに fail しています。
どこから沸いて出てきたんだこの空白行は。
BOM か、ソースのブランク行か
これは WordPress だけに限らず、PHP の空白行問題として割と報告されているようです。大別すると根本的な原因は
- BOM のついた UTF-8 を使用している場合
- PHP コード <?php ….. ?> の前後に空白行 (ブランク行) が残っている場合
があるようです。私が遭遇したのは後者で、テーマファイルを見たら空行が残っていて、削除すれば何事もなく This is a valid RSS feed になりました。
NG な例
[code gutter=”true” language=”php”]
(空白行)
(空白行)
<?php
[/code]
[code gutter=”true” language=”php”]
?>
(空白行)
[/code]
修正後
[code gutter=”true” language=”php”]
<?php
[/code]
[code gutter=”true” language=”php”]
?>
[/code]
ポイントとしては
- 改行はファイル先頭にあってもファイル末尾にあっても NG
- テーマファイルにあってもプラグインソースにあっても NG
-
?>
の後に一行無駄な改行があっただけでもダメ
というシビアさです。
記述は柔軟にできるが、ハマりポイントもそれだけ多い PHP の成せる技、という感じがしますね。 🙂
空白行を削って FEED Validator で再確認する際は、wp-cache プラグインを Disable することをお忘れなく。直したはずなのに空白行が取れていない…と泣きを見ます。
0件のコメント
1 件のピンバック