nDiki : 2005年09月13日

2005年9月13日 (火)

[ WiKicker ] hell mode - HTMLタグ付けブロックの導入

WiKicker では、直接 WikiPageHTMLタグを記述して表示に反映させる機能を提供していない。

HTMLタグ付けを許すのは嫌だ

HTMLタグ付けを許すと

  • 入力ミスによるトラブル
  • 悪意ある入力によるトラブル

が起きやすくなるし、ページのソースの単純さが大きく失われてしまう。 レンダリングしてHTMLにした時に、正しいHTMLを出力されることを保証することが困難になるとともに、HTML以外へのレンダリング/コンバートもかなり難しくなる。

この機能を導入すると、Wiki の良さの半分(あるいはもうちょっと沢山か、もうちょっと少なめ)が失われてしまう。

でも

とはいえ欲しいという声があることも事実。 オープンな WikiForum では全くお勧めできないが、閉じたユーザグループの中ではまぁ必要悪なのかもしれぬ。

また正直ちょっとした表現を追加したい時に、WiKicker 用のプラグインを書くのも面倒だというのは確かにある。

WiKicker では開始・終了マーカによる複数行にまたがるブロックを表すための文法は(閉じ忘れを避けるため)意図的に排除してある。 このため、複数行にわけて書きたいような長いデータを扱うような拡張も導入しにくい。

ちょっと手抜きして「生HTML書けちゃえば」という誘惑はなくはない。

大人の事情

ということでまあ自分に言い訳をしつつ、標準ではオフというかたちで HTMLタグ付けブロックを導入することにした。 スイッチは hell mode とかにしたい (今回は syntax.html というプロパティ名にしたけれど)。

記法は単純に、

 normal wiki syntax text...
 <html>
 html tagged text...
 ...
 </html>
 normal wiki syntax text...

のように行頭が <html> である行から、行頭が </html>である行までをHTMLタグ付けブロックとすることに。 このため、<html>ではじまる段落が書けなくなるという小さな非互換が発生するが、いたしかたない。

サニタイズ

HTMLタグを直接使えるようにするとはいえ、全てを許してしまうのはあまりに危険で非人道的すぎる。 有効なHTMLタグや属性は限定的であるべきだ。

このあたりの処理は面倒だが、幸いにしてCPANにモジュールがある。 今回は HTML::Scrubber を使うことにした。 HTML::Parserを使って parse し、指定したルールに従ってサニタイズしてくれる。

ちょっと使ってみた範囲では日本語(UTF-8UTF8 フラグなし)でも問題ないようだし、文法的に正しくなくてもきちんとサニタイズできているようだ。

ということで、これを採用することに。

どの要素・属性を許すかはまだきちんと決めかねる。 当面は様子をみながら、調整していく予定。 サニタイザは設置者が置き換えられるようにプラガブルにしておかねばならないな。

スポンサード リンク

[ WiKicker ] destination anchor を打てるように

WiKicker には終点アンカー(HTML だと name and/or id属性付きA要素)をページ中に書く機能がない。

  • 直観的ではない。この機能を知らない人が WikiPage を編集しようしたときに、ソーステキスト中にこれがあるのはよろしくない。HTMLを知っている人なら問題ないかもしれないが、そうでない人にはわかりにくい。
  • アンカー名の一意性の保証が面倒
  • 終点アンカーを書いて、他からご丁寧にリンクしても Wiki の正確上誰かが編集してすぐ無くなっちゃうかもしれない (そういってしまえばページそのものもそうであるが)。

等の(自分なりの)正当な理由で追加していなかったのだが、まぁ必要になったのであっさり追加することにした。 アンカーテキストに WiKicker のインライン要素を書けるようにするかどうか迷ったが、HTMLでレンダリングする際にA要素のネストを避けたりするのが大変なので書けない仕様にすることにした。

 [[anchor:anchor_name]]
 or
 [[anchor:anchor_name][anchor_text]]

という表記 (WRN scheme)を追加。 アンカー名の一意性の保証はまだ未実装。 やっぱやらんといかんかな。

[ 9月13日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.04811s / load averages: 0.42, 0.37, 0.41
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker