[リストへもどる]
一括表示
タイトルRubyForTPZのHtmlOut.rbを改造
記事No3834
投稿日: 2008/02/15(Fri) 18:38
投稿者Eclipse
こんにちは。
TaskPrizeは長年愛用していて、昨年末からRubyの勉強を始めたのでRubyForTPZをちょこちょこいじり始めました。

添付スクリプトのHtmlOut.rbはTPZのアイテムをHTMLで出力できますが、本文中にhtmlのタグがあった場合に出力されたHTMLでもタグとして認識されてしまい、
本文をすべて表示することが出来ません。
本文は<pre>...</pre>で囲んで出力しているので、空白や改行はそのまま表示されますが、htmlの特殊文字は表示されません。
そこでそこで特殊文字を変換するメソッドを作って、TaskPrizeのデータを書き込んでいる部分にそのメソッドを追加します。

まずはメソッドを作ります。
#======================================================================
#(<,>,&,",')をhtml特殊文字に変換するメソッド
def change_special_chrs(chr)
  chr.gsub!(/[<>&"']/) do |m|
    case m
      when "&"
        "&amp;"
      when "<"
        "&lt;"
      when ">"
        "&gt;"
      when '"'
        """
      when "'"
        "&#39;"
    end
  end
  return chr
end
#======================================================================

次に先のメソッドを使ってソースを書き換えます。
ソースを書き換えた部分は以下の通りです。
-----------------------------------------------------------------------
(76):  print " / ", change_special_chrs((tpz_current_folder).title)
(163):  print "<LI><A HREF=\"#", item.message_id, "\">", change_special_chrs(item.title), "</A></LI>"
(183):    print "<A NAME=\"", change_special_chrs(item.message_id), "\"></A>\n"
(185):      print "<H1>", change_special_chrs(item.title), "</H1>\n"
(187):      print "<H2>", change_special_chrs(item.title), "</H2>\n"
(195):      print "<PRE>\n【", change_special_chrs(doc.title), "】\n</PRE>\n"
(197):    print "<PRE>\n", change_special_chrs(doc.text), "\n</PRE>\n"
-----------------------------------------------------------------------

これで本文中などにHTMLでタグとして認識される文字があっても、問題なく出力されるようになります。