TinyMCEを使うにあたって、何かいいフィルターはないかなと探したら、HTMLpurifierが見つかりました。日本語情報が少ないので、ご紹介です。
ユーザーとして、これほど親しんでいるJavascriptのエディターはないと言えるほど、使っているTinyMCEですが、開発する方で使うのは初めてです。
そこで、htmlのフィルタリングをするには、何がいいかなと探してみたら、TinyMCEで3つ紹介されていました。その内の一つを、使ってみたら、FuelPHP上で簡単に動作しましたので、ご紹介です。
私は、コントローラで使い始めたのですが、早々にビューで利用することにしました。そちらのほうがforeachで回しているのでフィルタリングがかけやすいこと、ビューでこの手のフィルタリングをかけることは、別に表示のためのロジックであるから、抵抗はないこと。(人によっては、ビューにロジックが入るのを極端に嫌いますが、表示するためのロジックは当然ビューに入って然りだと、私は思います。)
そしてなにより、ビューでも問題なく、利用できたことが採用し、ここに紹介する理由です。
ただ、html5にはまだ対応していないようです。対応しているのは、XHTML 1.0 Transitionalがデフォルトで、その他 XHTML 1.0 Strict、HTML 4.01 Transitional、HTML 4.01 Strict、XHTML 1.1です。
で、実際のコードですが、これだけです。準備は:
require_once APPPATH.'vendor/htmlpurifier/library/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
$purifier = new HTMLPurifier($config);
実際のフィルタリングは:
echo $purifier->purify(危ないコンテンツ);
と、なります。
私はデフォルトのXHTMLを使用せず、html4.01 transitionalを利用しているため、その設定をしています。
これだけのため、パッケージを作成するほどでもありませんでした。
私は、ダウンロードしたzipを解凍し、htmlpurifier-4.3.0をhtmlpurifierにリネーム、これをFuelPHPのfuel/app/vendorにコピーしました。そのため、require_onceはこのインストール先を示すようになっています。
ただし、htmlpurifier-4.3.0の中にたくさん入っているファイルやフォルダーの中で、実行時に必要なのは、libraryだけです。その他は消してもかまいません。
タグの欠け程度はTinyMCEが修正してくれますが、Javascript含ませたコードも適当に処理してくれました。htmlpurifierはデフォルトでUTF-8を言語コードとして取り扱うため、そこらへんのチェックもしているように書かれていました。
HTMLpurifierはもっと色々と出来ます。設定できる項目がなかなかわかりづらいところにありましたが、やっと発見しました。こちらです。
たくさん設定できますが、使いそうなのは、HTMLDOCの他には、ホワイトリスト的なAllowか、ブラックリスト的なForbiddenAttributesとElementsですかね。けどFobidden系のやつは説明に、ホワイトリスト的な方を使えと書いてありますので、使用したいhtmlエレメントをAllowで羅列するのがよろしいようです。
追記:
この記事を書いた後、でもどこかでこのフィルターのことを読んだ気がしたので探したら、kenjiさんの記事にも既にありました。
http://d.hatena.ne.jp/Kenji_s/20111224/1324731427
パッケージも紹介されています。
https://github.com/fuel-packages/fuel-htmlpurifier
パッケージの中身をさっと見て見ましたら、どうもHTMLpurifierが自前で持っているオートローダーの代わりに、FuelPHPのオートローダーを使うよう、手間をかけてクラスを登録していました。
なんとなく、HTMLpurifierが持っているキャッシュの設定も行なっているようです。
まあ、簡単に使えるものを、まともなパッケージにしようとすると、これだけの手間がかかるのかと勉強になります。
これを使用しようかと思いましたが、最新版が出たときに、このパッケージが直ぐに最新版にできるのかどうか、つまりメンテナンスが行われるのか心配なため、使用はやめときます。たぶん、数年後にはメンテナンスされなくなるでしょう。(この手の作業は最初は面白いのですが、すぐに飽きるため、メンテナーがいなくなるのです。特に、使用者が多くない場合はです。)
ちなみに、私が作成したTinyMCEのパッケージも、無理に使う必要はありません。もともと、最初は学習目的で作成したものです。まだ、コードを入れていませんが、ユーザーのレベルに合わせ、使える機能を増減させる仕組みを作りたいがゆえに、今は手間をかけています。TinyMCEの設定スクリプトを必要な組み合わせの分だけ用意してもいいのですが、それですとファイルが増え、管理が大変なため、動的に生成する方法にしました。
追記:
HTMLpurifier以外のフィルターもたくさん含んだパッケージも既に作られています。BBコード、Markdown、Texitileをhtmlへ変換するフィルター、スマイリーを変換する、いらないコードをはぎ取る、変換するなど、多種多様のフィルターが用意されています。
https://github.com/fuel-packages/fuel-textfilter
| フレームワーク、パスとパッケージとルーティング< 前 | 次 >FuelPHP、ルーティング設定/テストプログラム |
|---|
| < 前 | 次 > |
|---|