Radeox で生成されるリンクをいじる方法 (不完全)

Radeox では、http または https の URL を書くと、リンク (XHTML の a 要素) に変換される。これをいじりたい場合の方法を、簡単にまとめてみる。

出す

jar cf radeox.jar radeox_markup.properties

SnipSnap の場合、radeox.jar は WEB-INF/lib にある。

いじる

radeox_markup.properties の中で、リンクに関係しているのは以下 2 項目。

filter.url.match
変換対象の URL (正規表現)
filter.url.print
変換方法 (java.text.MessageFormat の書式)

ここでは例として、「外部リンクをたどる時に専用ページを経由させる」というのを考える。Web 上の掲示板で時々見られるやつだ。SnipSnap のページは、タイトルがそのまま URL になるので、リファラを通じて外部のサイトに情報が漏れてしまう。これを防ごうというわけ。

filter.url.match=([^\"'=?]|^)((http|ftp)s?://(%[\\p{Digit}A-Fa-f][\\p{Digit}A-Fa-f]|[-_.!~*';/?:@#&=+$,\\p{Alnum}])+)
filter.url.print=<span class=\"nobr\">{0}<a target="_blank" href=\"/util/outerzone?{1}\">{2}</a></span>

経由する専用ページは何で作ってもいいが、jsp で単純な例を示すと、

<% String uri = request.getQueryString(); %>
<title>外部リンク</title>

外部のサイトにジャンプしますよ。
<a href="<%= uri %>"><%= uri %></a>

入れる

jar uf radeox.jar radeox_markup.properties

SnipSnap の場合、サーバを落としていないと jar ファイルを更新できないことに注意。

落ち込む

以上の手順でリンクを改変できるわけだけど、実は完全じゃない。

  • link マクロで作られたハイパーリンクは、上記の方法ではいじれないっぽい。
  • URL のうち、アンカー参照が抜け落ちてしまう。