SSブログ
RSS [RSS1.0] [RSS2.0]
共謀罪を含む改悪組織犯罪処罰法は
【「共謀罪」法 衆参両院議員の投票行動(東京新聞 2017/6/16)】

ThunderbirdがRSSフィードからSubjectを作る時の振る舞いに注意

 Thunderbird(24.4.0)をRSSリーダーとして使っているが、ThunderbirdはRSSフィードの <item> タグ内の <title> タグをメールのSubjectにするらしい。昨日、このSubjectが正しく表示されてない(作られてない)場合があることに気付いた。RSSフィードの <title> タグ内に < と > がある場合に発生する。ツイートをRSSフィードに変換するプログラムを利用してThunderbirdでツイートを確認している時に見つけたのだが、ツイートでは >_< などの顔文字が頻繁に使われる。Subjectが問題なく作られることもあるが、不具合がどのように場合に発生するかある程度分かったので、いくつか事例を記録しておく。

 ThunderbirdはRSSフィードを受信すると、そのデータを基にメールヘッダ付きのHTMLソースを作る。そのHTMLソース内の <title> タグは通常はRSSフィードの <item> タグ内の <title> タグのテキストをそのまま使う。しかし、HTMLエンティティに変換してあるアンパサンド &amp; 、ダブルクォート &quot; 、シングルクオート &#039; ( &apos; )、小なり &lt; 、大なり &gt; は元に戻して、アンパサンド & 、ダブルクォート " 、シングルクオート ' ( ' )、小なり < 、大なり > にして <title> タグを作ってしまう。この中の小なり < と大なり > はHTMLソースのタグに使われるので、 <title> </title> 内にあると、場合によってはSubjectの生成に異常が生じるようである。

ケース
元のテキスト:ツイートやブログタイトルなど表示したい元のテキスト
RSS:RSSフィードの <item> タグ内の <title></title> 内
HTML:Thunderbirdが作ったHTMLソースの <title></title> 内
Subject:Thunderbirdが作ったSubject
ケース1:正常に表示されている場合(ツイートのRSSフィード作成プログラムを修正した後)
ツイート:<title>について ←ツイートのRSSフィードの<title>タブにhtmlspecialcharsを使ってみた場合のテスト
RSS:&amp;lt;title&amp;gt;について ←ツイートのRSSフィードの&amp;lt;title&amp;gt;タブにhtmlspecialcharsを使ってみた場合のテスト
HTML:&lt;title&gt;について ←ツイートのRSSフィードの&lt;title&gt;タブにhtmlspecialcharsを使ってみた場合のテスト
Subject:<title>について ←ツイートのRSSフィードの<title>タブにhtmlspecialcharsを使ってみた場合のテスト
ケース2:ソネブロがRSSフィードの作成に失敗して、<title> が消える。(ソネブロ)
ブログタイトル:ThunderbirdのRSSリーダーはエンコードされた<>をデコードして<title>にしてSubject:が変になる
RSS:ThunderbirdのRSSリーダーはエンコードされた&amp;lt;&amp;gt;をデコードしてにしてSubject:が変になる
HTML:ThunderbirdのRSSリーダーはエンコードされた&lt;&gt;をデコードしてにしてSubject:が変になる
Subject:ThunderbirdのRSSリーダーはエンコードされた<>をデコードしてにしてSubject:が変になる
ケース3:ソネブロへのメール投稿による自動ツイート。 <title> が消える。(RSSフィード作成プログラム修正前)
ツイート:ThunderbirdのRSSリーダーはエンコードされた<>をデコードして<title>にしてSubject:が変になる | http://masami7777.blog.so-net.ne.jp/2014-04-29
RSS:ThunderbirdのRSSリーダーはエンコードされた&lt;&gt;をデコードして&lt;title&gt;にしてSubject:が変になる | http://t.co/Qe78MDhvr1
HTML:ThunderbirdのRSSリーダーはエンコードされた<>をデコードして<title>にしてSubject:が変になる | http://t.co/Qe78MDhvr1
Subject:ThunderbirdのRSSリーダーはエンコードされた<>をデコードしてにしてSubject:が変になる | http://t.co/Qe78MDhvr1
ケース4:正常に表示されているように見える場合(ソネブロ)
ブログタイトル:&lt;title&gt;について
RSS:&amp;lt;title&amp;gt;について
HTML:&lt;title&gt;について
Subject:<title>について
ケース5:Subjectで「時に<title>の所は」の <title> が消え、その後の <title> は残る。(RSSフィード作成プログラム修正前)
ツイート:RSSフィードでは > も < もエンコードされてる。ThunderbirdがHTML形式のメールに変換する時に<title>の所はデコードしちゃってる。<body>の方はエンコードされたまま。それで、<title>をSubject:にするから < がタブの一部とみなされて…。
RSS:RSSフィードでは &gt; も &lt; もエンコードされてる。ThunderbirdがHTML形式のメールに変換する時に&lt;title&gt;の所はデコードしちゃってる。&lt;body&gt;の方はエンコードされたまま。それで、&lt;title&gt;をSubject:にするから &lt; がタブの一部とみなされて…。
HTML:RSSフィードでは > も < もエンコードされてる。ThunderbirdがHTML形式のメールに変換する時に<title>の所はデコードしちゃってる。<body>の方はエンコードされたまま。それで、<title>をSubject:にするから < がタブの一部とみなされて…。
Subject:RSSフィードでは > も < もエンコードされてる。ThunderbirdがHTML形式のメールに変換する時にの所はデコードしちゃってる。<body>の方はエンコードされたまま。それで、<title>をSubject:にするから < がタブの一部とみなされて…。
ケース6:Subjectが消えた。(RSSフィード作成プログラム修正前)
ツイート:<title> (←<title>)はThunderbirdのSubjectで消えちゃってる。<title><title></title>みたいに認識しているのだろう。
RSS:&lt;title&gt; (←<title>)はThunderbirdのSubjectで消えちゃってる。<title><title></title>みたいに認識しているのだろう。
HTML:<title> (←<title>)はThunderbirdのSubjectで消えちゃってる。<title><title></title>みたいに認識しているのだろう。
Subject:
ケース7:運よく正常に表示されている例。(RSSフィード作成プログラム修正前)
ツイート:あれ? >_< は問題なかった。
RSS:あれ? &gt;_&lt; は問題なかった。
HTML:あれ? >_< は問題なかった。
Subject:あれ? >_< は問題なかった。
ケース8:ついっぷるからの投稿。「〜‼︎」は他の人のツイートからコピー。<RT から <> までが消えた。<title> も消える。(RSSフィード作成プログラム修正前)
ツイート:難しい〜‼︎>_<RT @self7777: ThunderbirdのRSSリーダーはエンコードされた<>をデコードして<title>にしてSubject:が変になる | http://masami7777.blog.so-net.ne.jp/2014-04-29
RSS:難しい〜‼︎&gt;_&lt;RT @self7777: ThunderbirdのRSSリーダーはエンコードされた&lt;&gt;をデコードして&lt;title&gt;にしてSubject:が変になる | http://t.co/Qe78MDhvr1
HTML:難しい〜‼︎>_<RT @self7777: ThunderbirdのRSSリーダーはエンコードされた<>をデコードして<title>にしてSubject:が変になる | http://t.co/Qe78MDhvr1
Subject:難しい〜‼︎>_をデコードしてにしてSubject:が変になる | http://t.co/Qe78MDhvr1
ケース9:<RT から後ろがすべて消えた。私が最初に発見した他人のツイートがこのケース。(RSSフィード作成プログラム修正前)
ツイート:このツイートのThunderbirdでの件名は「難しい〜‼︎>_をデコードしてにしてSubject:が変になる | http://masami7777.blog.so-net.ne.jp/2014-04-29 」 RT @self7777: 難しい〜‼︎>_<RT @self7777: ThunderbirdのRSSリーダーは…
RSS:このツイートのThunderbirdでの件名は「難しい〜‼︎&gt;_をデコードしてにしてSubject:が変になる | http://t.co/Qe78MDhvr1」 RT @self7777: 難しい〜‼︎&gt;_&lt;RT @self7777: ThunderbirdのRSSリーダーは…
HTML:このツイートのThunderbirdでの件名は「難しい〜‼︎>_をデコードしてにしてSubject:が変になる | http://t.co/Qe78MDhvr1」 RT @self7777: 難しい〜‼︎>_<RT @self7777: ThunderbirdのRSSリーダーは…
Subject:このツイートのThunderbirdでの件名は「難しい〜‼︎>_をデコードしてにしてSubject:が変になる | http://t.co/Qe78MDhvr1」 RT @self7777: 難しい〜‼︎>_
ケース10:シングルクオートとダブルクォートでの確認(ツイートのRSSフィード作成プログラムを修正した後)
ツイート:シングルクオート'とダブルクォート"がどうなるかテスト。
RSS:シングルクオート'とダブルクォート&quot;がどうなるかテスト。
HTML:シングルクオート'とダブルクォート"がどうなるかテスト。
Subject:シングルクオート'とダブルクォート"がどうなるかテスト。

 以上から、シングルクオート'とダブルクォート" は気にする必要が無さそうだが、Thunderbirdが作ったHTMLソースの <title></title> 内に <title> が含まれていると最初の <title> が消えるようである。また、顔文字 >_< のように、新しいタグの始まりを表す < がThunderbirdが作ったHTMLソースの <title></title> 内にあると、その後ろからタグの終わりを表す > までを消してしまうことがある。ケース7のように < の後に > が無ければ問題ないかもしれないが、ケース9のように < の後に > が無いように見える場合も消されてしまう。
 ケース7では問題なくケース8やケース9で < の後が消えた原因は、どうやら < 直後の RT にありそうである。<RT となっていることで新たなタグの始まりとみなされた可能性がある。xmlファイルをテキストエディタを使って手動で作り、Thunderbirdで読み込む実験を追加してみた。

ケース11:<RT から後ろが消えた。(実験用xmlファイル)
表示希望てきすと>_<RT テキスト:
RSS:てきすと&gt;_&lt;RT テキスト
HTML:てきすと>_<RT テキスト
Subject:てきすと>_
ケース12:< RT から後ろは残ってる。(実験用xmlファイル)
表示希望:てきすと>_< RT テキスト
RSS:てきすと&gt;_&lt; RT テキスト
HTML:てきすと>_< RT テキスト
Subject:てきすと>_< RT テキスト
ケース13:< から後ろは残ってる。(実験用xmlファイル)
表示希望:てきすと>_<テキスト
RSS:てきすと&gt;_&lt;テキスト
HTML:てきすと>_<テキスト
Subject:てきすと>_<テキスト
ケース14:<RT から > までが消えた。(実験用xmlファイル)
表示希望:てきすと>_<RT テキスト>末尾
RSS:てきすと&gt;_&lt;RT テキスト&gt;末尾
HTML:てきすと>_<RT テキスト>末尾
Subject:てきすと>_末尾
ケース15:< RT から > までは残ってる。(実験用xmlファイル)
表示希望:てきすと>_< RT テキスト>末尾
RSS:てきすと&gt;_&lt; RT テキスト&gt;末尾
HTML:てきすと>_< RT テキスト>末尾
Subject:てきすと>_< RT テキスト>末尾
ケース16:< から > までは残ってる。(実験用xmlファイル)
表示希望:てきすと>_<テキスト>末尾
RSS:てきすと&gt;_&lt;テキスト&gt;末尾
HTML:てきすと>_<テキスト>末尾
Subject:てきすと>_<テキスト>末尾
ケース17:<RT から後ろは残ってる。(実験用xmlファイル)
表示希望:てきすと>_<RT テキスト
RSS:てきすと&amp;gt;_&amp;lt;RT テキスト
HTML:てきすと&gt;_&lt;RT テキスト
Subject:てきすと>_<RT テキスト
ケース18:<RT から > までは残ってる。(実験用xmlファイル)
表示希望:てきすと>_<RT テキスト>末尾
RSS:てきすと&amp;gt;_&amp;lt;RT テキスト&amp;gt;末尾
HTML:てきすと&gt;_&lt;RT テキスト&gt;末尾
Subject:てきすと>_<RT テキスト>末尾

 ケース11とケース14のようにThunderbirdが作ったHTMLソースの <title></title> 内に <RT が存在する場合だけ消えていて、< の直後に半角スペースや全角テキストがある場合は大丈夫だった。< がタグの始まりか否かの判断は直後の文字で決まるようだ。このように分かってみると、解明のために時間を費やしたことが間抜けに思えるほど当たり前のような気がしてきた。

 今回の不具合を引き起こした【Twitterで取得したユーザーのJSONデータをRSSフィードに変換する(GAEを使う)】【自分宛のツイートのJSONデータをRSSフィードに変換する(GAEを使う)】のphpファイルは、【PHP: htmlspecialchars - Manual】を参考にして、<item> タグ内の <title> タグ生成スクリプトを修正した(元はケース11とケース14のようだったが、ケースケース17、ケース18のようになる)。シングルクオートは今は問題が起こってないのでHTMLエンティティに変換してない。問題が起こったら修正する。


nice!(1)  コメント(0)  トラックバック(0) 
カテゴリー:サイトを見て
共通テーマ:パソコン・インターネット

読者の反応

nice! 1

sonet-asin-area

コメント 0

コメントを書く 

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。
captcha

トラックバック 0

トラックバックの受付は締め切りました