RSSリーダーの本文表示の違いを探る(その3:NoCDATAの利用)
Movable Typeには NoCDATA というオプションが用意されています。これを用いれば RSSフィードのデータの特殊文字をエンコードする設定も可能です。ユーザーズマニュアルに下記の説明があります。
デフォルトでMovable Typeは、データをXMLにエンコードしているとき、あなたのデータにHTMLタグや、XMLに対し安全でないデータが含まれていないかどうかをチェックし、検出した場合は、データをCDATAタグで囲みます。 ただし、ニュース・アグリゲータの中には、CDATAを他のデータと一緒にすると、問題が生じることがあります。こうした問題がある場合は、NoCDATAを使って特殊文字をエンティティにエンコードすることができます。
具体的には設定ファイル mt.cfg の250行目にある
- # NoCDATA 1
という行の先頭の#とブランクを削除することで有効になります。
実験として、
本文に<a href="hogehoge">HTMLタグ</a>を含んでいます。
という本文を例に変換してみました。
NoCDATA 0 の場合
<description><![CDATA[<p>本文に<a href="hogehoge">HTMLタグ</a>を含んでいます。</p>]]></description>
NoCDATA 1 の場合
<description><p>本文に<a href="hogehoge">HTMLタグ</a>を含んでいます。</p></description>
これまでのまとめです。
- HTMLタグや特殊文字を存在する場合、CDATAセクションとなる
- NoCDATAオプションを利用することでHTMLタグや特殊文字のエンコード(つまりCDATAセクションとならない)が可能
- MTEntryBody を使用し Convert Line Breaks が有効の場合、改行用のHTMLタグが付与されるため常にCDATAセクションとなる。MTEntryExcerpt を使用するとHTMLタグは全て除去されるため、CDATAセクションとなるのはHTMLエンティティが存在する場合のみ
- Movable Type3.0 と 3.1x では description のテキスト部分に用いられているMTタグが異なる
ということで、一番最初の index.rdf のサンプルはHTMLタグを用いてCDATAセクションの有無を説明したかったのですが、CDATAセクション有無がMTタグに依存してしまうため、description には MTEntryExcerpt を適用した状態でHTMLエンティティを用いました。
しかしよく考えてみると、その状態で本文とは別に「概要(excerpt)」を記述すればHTMLタグを利用できた訳です。つまりCDATAセクション化やエンコードはそもそも「概要」を対象とした機能であり、そうすることで機能は本来の役割を自然に振る舞うのではないでしょうか。
- Movable Type でコメント用 RSS フィードを出力する
- RSSリーダーの本文表示の違いを探る(その2)
- RSSリーダーの本文表示の違いを探る(その1)
- Feed Validator警告除去(Onclick属性削除プラグイン)
エントリーとは関係ないですが、すごいコメントスパムですね?(笑)ちょっとびっくりしたので思わずコメントしてしまいました。
>198さん
こんばんはー。
いや?、海外のブロガーに人気あるようで(泣)。
#いい加減に対策しろって?(笑)
おはようございます。
いつもこちらのエントリー記事を時には楽しく、時には興味深く拝見しております。
私もエントリーと関係ないコメントで誠に恐縮ですが
一部の友達からBlogの不具合を指摘されまして
その事でこちらで相談に乗って頂ければと思い、コメント欄汚しを承知の上で書き込みさせて頂きました。
ただ、質問したい内容に関連した該当エントリーが、私が見る限りこちらで見つかりませんでした。
(私が見落としているだけかも知れませんが・・・)
後程、私のBlogでその件に関するエントリーを立ち上げますので
お手数を掛けて申し訳ありませんが、不具合事項を確認して頂けないでしょうか?
>ねーさん
こんにちは。
ご質問の件ですが、「コメントが真っ白になる」については
「文字化けする」については
が参考になると思います。補足ですが、コメントが真っ白になる件については2.xのテンプレートで発生していた問題のようです。
何かご不明な点がございましたらこちらで結構ですのでご連絡頂けますでしょうか。
それではよろしくお願い致します。
yujiroさん、早々の対応ありがとうございます。
今回指摘のあった不具合は以下の通りです(一部抜粋せて頂いております)
↓
「メニューからBlogに入った時はエンコードは「UTF-8」になっていて、ちゃんと記事は読めます。
そして次にcommentに入ると文字化けです。
その時のエンコードは日本語(シフトJIS)になっています。
そして更新を押すと元の「UTF-8」に戻ります。
真っ白になるのは上のTOPと記事タイトルがありますよね。
あの記事タイトルで飛んだ時に真っ白になります」
実は、上記に挙げた友達のコメントも文字化けしておりまして
エンコードを日本語JUSにしたら
文字化けしていたコメントが正常に閲覧出来ました。
そこからコピーしたコメントをこちらに持って来ました。
現在私のBlogエンコードはUTF-8ですので
日本語JISだと文字化けします。
参考になるかどうか分かりませんが
メインページを日本語JISで見るとページが真っ白です。
又、何かありましたら連絡致します。
すみません。
↑のコメントに名前が反映されていなかったようです。
>ねーさん
ご連絡ありがとうございます。
補足ですが、以前私の書いたカスタマイズで個別エントリーアーカイブに「続きを読む」を導入するとコメント投稿後に文字化けするという問題が発生し、JavaScriptが悪さをしているため .htaccess で文字コードを指定する方法を提案させていただきました。
たしかにUTF-8のページをShift_JISで参照すると真っ白になりますね。
ムーバブルタイプでインストールをしたときはatomの配信だけですが、モジュールかなにかでrss配信できるようになるんでしょうか?唐突な質問ですいません。
>salinaさん
こんにちは。
ご質問の件につきまして、ページに表示されているリンクはatomだけですが、他のフィードも生成されています(インデックステンプレートにある、RSD・RSS2.0)。
それではよろしくお願い致します。