RSSのUTF-8化
最近Bulkfeedsさんに拾ってもらえません。「最近」つっても、調べて見ると2004年の7月=約10ヶ月前に「Bulkfeedsさんに拾ってもらえない」という旨のエントリが有りますんで、随分長い間放置してる事になりますが(^^;;
でも、はっと気付くと、同じサーバに設置してるお友達のMTもBulkfeedsさんに拾ってもらえず「おとなりエントリ」が表示されなくなってる→さすがにこれはヤバい感じなので、この機会に重い腰を上げてみた次第。
まず、Bulkfeedsさんに当MTのRSS、index.rdfを喰って頂きます。
以下の URL は 登録に失敗しました。https://crusherfactory.net/~yas_/index.rdf (XML parse error in RSS)
やっぱ↑こうなります。エラーなのは解るんだけど、「なにがエラーなのか」を表示してくれないのでよく解んない(^_^;)
続いて、RSSの妥当性をチェックするFEED Validatorさんに喰って頂きます。
Congratulations!
This is a valid RSS feed.
え?(^_^;) valid=「正当な」RSSフィードなんすか。…そりゃ困ったな(^^;;
のちの検証の結果、「valid RSS feed」となるためには.htaccess等でAddType "text/xml; charset=EUC-JP"xml xsl rdf
とか設定しておく必要がある事が判明。これがないと
・Feeds should not be served with the "text/plain" media type
・Your feed appears to be encoded as "EUC-JP", but your server is reporting "US-ASCII"と叱られる。
ワタシは以前にこの設定をしてたらしい。忘れてたけど(^^;;
無い知恵を絞って考えます。
「う〜む。Bulkfeedsさんに最近登録された(=エラーにならずに登録できる)RSSを見てみると、全部UTF-8みたいな気がする。つまり、単純にRSSをUTF-8にすれば良いのかな?」
本来はMT側をいじってMTの出力するindex.rdfをUTF-8化するべきなんでしょけど、ワタシゃ未だにPerl全然解んない(^^;ので、PHPでなんとかすることにします。
header("Content-Type: application/xml; charset=utf-8");
$file = "index.rdf";
$page = @file($file); //@を付けるとファイルオープンに失敗してもエラーを出さない
if ($page == False) die("File can not open");
//以後の出力を全てUTF-8に
mb_http_output ("UTF-8");
//取得したファイルを行毎に配列に格納
while (list($num, $line) = each($page)){
//EUC-JPと書いてるトコをUTF-8に書き換え
$line = eregi_replace("EUC-JP","UTF-8",$line);
//出力
echo $line ;
}
?>
元のindex.rdfを読んで、「EUC-JP」を「UTF-8」に置換して、UTF-8で出力するだけのスクリプトです。ただそれだけ。これをEUC/LFで保存して、index.rdfと同じトコに置きます。
準備が出来たら、今度はコレをBulkfeedsさんに喰って頂きます。
Add / Ping your RSS以下の RSS Feed を登録/更新しました。
はかいおうこうむてん
ふむふむ、コードがUTF-8なら文句ないんですな(^_^)
ということで、以下の記述を.htaccessに追加し、index.rdfへのアクセスでindex.rdf.phpを読むようにしてみました。
RewriteBase /~yas_
RewriteRule ^index.rdf$ index.rdf.php
RewriteRule ^index.xml$ index.xml.php
RewriteRule ^atom.xml$ atom.xml.php
なお、この記述はmod_rewriteが使える環境じゃないと駄目です。
いつの間に「BulkfeedsさんがUTF-8じゃないと喰わない」(もしくは「EUC-JPのは喰わない」)仕様になっちゃったのか謎ですが、これで、なんとかBulkfeedsさんに喰って頂ける模様。
RSS構文をチェックしてくれる日本語サービス。FEED Validatorより警告が具体的で解りやすいかも。