HTML::EscapeEvilで掲示板的なHTMLプリプロセッサを作るときの注意

たとえば、掲示板で、textareaに入力してもらい、表示するときにあるHTMLタグは生かし、あるHTMLタグは死んでもらうときに利用すると便利なのが、HTML::EscapeEvilモジュールです。

しかし、HTML::EscapeEvilで、HTMLタグの全く無い文字列を入れると、空っぽになって返ってくる。しょうがないので、にくるんでやってみるとうまくいったよ。でも、あとで除去しないとダメ。

sub _preprocess_text {
  $_ = shift;
  my $escapeevil = HTML::EscapeEvil->new;
  $escapeevil->add_allow_tags( qw( a pre blockquote strong em ) );
  $escapeevil->parse("<body>$_</body>");
  $_ = $escapeevil->filtered_html;
  $escapeevil->clear;               
  s|&lt;body&gt;(.+?)&lt;/body&gt;|$1|so;
  s|<a(.*?)>|<a$1 target="_blank">|sgo;
  s|<pre(.*?)>|<pre$1 class="prettyprint">|sgo;
  s|\n|<br />|sgo;
  return $_;
}