動作
このサブルーチンの処理内容は次の通りです。
- HTMLタグを解析し、無許可のタグを無効化させる処理
- 開始タグと終了タグの過多などをチェックし、補完または無効化させる処理
\rをすべて削除(ver 1.10で削除)
- &をすべて&に置換
- タグ外の半角スペースを に置換
- タグ内のstyle属性、id属性、class属性をすべて削除
- タグ外の\nを<br>に置換
タグ内の\nを半角スペースに置換(ver 1.10で削除)
引数
引数$htmlには、入力フォーム(<form></form>など)から受け取ったコメントを渡してください。
引数$tag1と$tag2と$tag3は、どのHTMLタグを許可するかを指定するものです。brなどの終了タグのないものは$tag1に、終了タグのあるインライン要素タグは$tag2に、終了タグのあるブロック要素タグは$tag3に設定してください。
この値は省略してもかまいません。($tag1 eq'' 等として処理)
$tag1 eq '0' の場合、すべてのタグを無効化します。
$tag1内に'/' が含まれていた場合、許可するタグを個別に指定できます。区切り記号は/です。たとえば、'img/br'の場合、imgタグとbrタグのみを許可します。
$tag1 eq '1' または $tag1 eq'' の場合、isi-sii.pl内で設定したタグを許可します。
$tag2、$tag3の動作もこれと同様です。
$tag1がどれにも該当しない場合、$tag1 eq '1'と同じ動作をしますが、今後の仕様変更に備え、isi-sii.pl内で設定したタグを許可したい場合は明示的に'1'を設定しておいてください。
サンプル1
プログラムサンプル:
require '../cgi/isi-sii.pl';
$html='<b>今日</b>の<table><i>気分は <!電球>です。';
$pass='../cgi/';
&isi_sii::Check_Html($html);
print $html;
サンプルの出力結果:
HTML> <b>今日</b>の<table<<i>気分は <!電球>です。</i>
ブラウザ> 今日の<table>気分は です。
許可済みのタグ(<b>)は有効のまま、無許可のタグ(<table>)は無効化されているのがわかります。
また、<i>の終了タグが不足しているため、自動的に末尾にこれを補完しています。
なお、この段階では絵文字タグ(<!電球>)はそのままなので、不明なタグとしてブラウザは無視します。
サンプル2
通常、HTMLタグの許可不許可の設定はisi-sii.pl内に記録されていますが、引数$tag1と$tag2を使うと、タグの許可設定をカスタマイズすることが出来ます。
プログラムサンプル:
require '../cgi/isi-sii.pl';
$html='<b>今日</b>の気分は<font color="red">超ナイス</font>です。';
$pass='../cgi/';
&isi_sii::Check_Html($html,'0','b/i/u/small','0');
print $html;
サンプルの出力結果:
HTML> <b>今日</b>の気分は<font color="red">超ナイス></font>です。
ブラウザ> 今日の気分は<font color="red">超ナイス</font>です。
上記の例では$tag2='b/i/u/small'を設定してあるため、b,i,u,smallのタグだけを許可するように動作が変更されました。