2013年9月21日土曜日

コマンドラインからHTMLサニタイズする

ソースコードをブログに貼付ける際に、簡単なサンプルコードをコマンドラインからHTMLサニタイズしたくなりました。そこで、方法を調べたところ、perlやphpをコマンドラインから呼ぶ方法や、recodeコマンドを使う方法が見つかりました。(正確には逆のことをする方法を見つけたので、サニタイズするコマンドに書き換えてみました)

方法1.PHPによるシェルコマンドの作成


cat $1 | php -r 'while(($line=fgets(STDIN)) !== FALSE) echo htmlspecialchars($line);'

php5.4を前提にしたコードになっていたので、少し修正しました。5.4の場合はHTML5などに対応したオプションフラグが容易されているため、php5.4環境が前提ならばhtmlspecialcharsにフラグを追加するとよいかもしれません。

方法2.Perlによるシェルコマンドの作成


cat $1 | perl -MHTML::Entities -le 'while(<>) {print encode_entities($_);}'

なお、このコマンドを動作させるには、自分の環境(MacOSX)では root権限で下記を実行してライブラリを追加する必要がありました。

cpan install HTML::Entities

方法3.GNU recodeコマンドを使う

あまり聞き慣れないコマンドですが、代表的なLinuxディストリビューションのaptやyumパッケージには含まれているようです。様々なテキストコードの変換が可能なので、勉強しておくと結構役立つかもしれません。

recodeのインストール

recodeはroot権限にて下記を実行してインストールできます。

yum install recode
or
apt-get install recode

reocodeによるHTMLサニタイズ例

cat ファイル名 | recode utf8..html

utf8のところは文字エンコーディングによって変える必要があります。

0 件のコメント:

コメントを投稿