今、phpを使って、不特定多数のユーザーが入力するフォームを製作中。
htmlタグは有効にしたいのですが、scriptとかiframeとか使って欲しくないタグもあるわけです。
phpの関数strip_tagsでもタグを取り除くことは可能なんですが、取り除かないタグを全て指定しなきゃいけないという面倒くささ。
なので、自分で作ってみました。
//禁止するタグを設定
$errtag[pair]=array('script','iframe','frame','form','textarea');//閉じるタグ
$errtag[independent]=array('meta','link','input');//閉じないタグ
//閉じる(ペアの)タグ用
foreach($errtag[pair] as $key => $value){
$match_pat='/<'.$value.'/';
$match_replace='/<'.$value.'[^>]*>((\\n|\\r|.)*)<\/'. $value .'>/';
$taglist.='<'.$value.'>';
if(preg_match($match_pat,$news)){
print$value.'タグは使えません。';//エラー表示
$news=preg_replace($match_replace,'',$news[body]);//取り除く作業
}
}
//閉じない(単体の)タグ用
foreach($errtag[independent] as $key => $value){
$match_pat='/<'.$value.'/';
$match_replace='/<'.$value.'[^>]*>/';
$taglist.='<'.$value.'>';
if(preg_match($match_pat,$news)){
print$value.'タグは使えません。';//エラー表示
$news=preg_replace($match_replace,'',$news[body]);//取り除く作業
}
}
もうちょっといじって、
まず、全部閉じないタグ用の判別処理→あまった閉じるタグを取り除くとすればもうちょっとよくなるかな。