RSSリーダーの本文表示の違いを探る(その3:NoCDATAの利用)

RSSリーダーの本文表示の違いを探る(その3:NoCDATAの利用)

Posted at January 29,2005 10:00 PM
Tag:[MovableType, RSS]

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>&lt;p&gt;本文に&lt;a href=&quot;hogehoge&quot;&gt;HTMLタグ&lt;/a&gt;を含んでいます。&lt;/p&gt;</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セクション化やエンコードはそもそも「概要」を対象とした機能であり、そうすることで機能は本来の役割を自然に振る舞うのではないでしょうか。

関連記事
トラックバックURL


コメント

エントリーとは関係ないですが、すごいコメントスパムですね?(笑)ちょっとびっくりしたので思わずコメントしてしまいました。

[1] Posted by 198 : January 29, 2005 10:13 PM

>198さん
こんばんはー。
いや?、海外のブロガーに人気あるようで(泣)。

#いい加減に対策しろって?(笑)

[2] Posted by yujiro : January 30, 2005 1:15 AM

おはようございます。
いつもこちらのエントリー記事を時には楽しく、時には興味深く拝見しております。

私もエントリーと関係ないコメントで誠に恐縮ですが
一部の友達からBlogの不具合を指摘されまして
その事でこちらで相談に乗って頂ければと思い、コメント欄汚しを承知の上で書き込みさせて頂きました。

ただ、質問したい内容に関連した該当エントリーが、私が見る限りこちらで見つかりませんでした。
(私が見落としているだけかも知れませんが・・・)

後程、私のBlogでその件に関するエントリーを立ち上げますので
お手数を掛けて申し訳ありませんが、不具合事項を確認して頂けないでしょうか?

[3] Posted by ねーさん : January 30, 2005 9:49 AM

>ねーさん
こんにちは。
ご質問の件ですが、「コメントが真っ白になる」については

文字が表示されない不具合(記事が真っ白)・その2

「文字化けする」については

.htaccessによる文字化け対策

が参考になると思います。補足ですが、コメントが真っ白になる件については2.xのテンプレートで発生していた問題のようです。

何かご不明な点がございましたらこちらで結構ですのでご連絡頂けますでしょうか。
それではよろしくお願い致します。

[4] Posted by yujiro : January 30, 2005 2:58 PM

yujiroさん、早々の対応ありがとうございます。

今回指摘のあった不具合は以下の通りです(一部抜粋せて頂いております)

「メニューからBlogに入った時はエンコードは「UTF-8」になっていて、ちゃんと記事は読めます。
そして次にcommentに入ると文字化けです。
その時のエンコードは日本語(シフトJIS)になっています。
そして更新を押すと元の「UTF-8」に戻ります。
真っ白になるのは上のTOPと記事タイトルがありますよね。
あの記事タイトルで飛んだ時に真っ白になります」

実は、上記に挙げた友達のコメントも文字化けしておりまして
エンコードを日本語JUSにしたら
文字化けしていたコメントが正常に閲覧出来ました。
そこからコピーしたコメントをこちらに持って来ました。

現在私のBlogエンコードはUTF-8ですので
日本語JISだと文字化けします。

参考になるかどうか分かりませんが
メインページを日本語JISで見るとページが真っ白です。

又、何かありましたら連絡致します。

[5] Posted by Anonymous : January 30, 2005 7:35 PM

すみません。
↑のコメントに名前が反映されていなかったようです。

[6] Posted by ねーさん : January 30, 2005 7:41 PM

>ねーさん
ご連絡ありがとうございます。
補足ですが、以前私の書いたカスタマイズで個別エントリーアーカイブに「続きを読む」を導入するとコメント投稿後に文字化けするという問題が発生し、JavaScriptが悪さをしているため .htaccess で文字コードを指定する方法を提案させていただきました。
たしかにUTF-8のページをShift_JISで参照すると真っ白になりますね。

[7] Posted by yujiro : January 31, 2005 1:23 AM

ムーバブルタイプでインストールをしたときはatomの配信だけですが、モジュールかなにかでrss配信できるようになるんでしょうか?唐突な質問ですいません。

[8] Posted by salina : July 17, 2007 7:50 PM

>salinaさん
こんにちは。
ご質問の件につきまして、ページに表示されているリンクはatomだけですが、他のフィードも生成されています(インデックステンプレートにある、RSD・RSS2.0)。
それではよろしくお願い致します。

[9] Posted by yujiro : July 20, 2007 9:14 AM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)