悪意あるHTMLコードをきれいにするHTMLPurifierを試してみました。
試したPHPコードは以下の通り。
// HTMLPurifierを生成する $dirty_str = 'hogehoge'; $config = HTMLPurifier_Config::createDefault(); $config->set('Core', 'Encoding', 'UTF-8'); $config->set('Core', 'Language', 'ja'); $config->set('Attr', 'AllowedFrameTargets', array('_blank','_self')); $hp = new HTMLPurifier($config); //危険なHTMLタグを無効化 $clean_str = $hp->purify( $dirty_str );
他の参考サイトにならってconfigオブジェクトに設定を格納しようと思ったら以下のようなエラーが出ました。
Notice: Using deprecated API: use $config->set('Core.Encoding', ...) instead on line 8 in file ... in Config.php on line 564 Notice: Using deprecated API: use $config->set('Core.Language', ...) instead on line 9 in file ... in Config.php on line 564 Notice: Using deprecated API: use $config->set('Attr.AllowedFrameTargets', ...) instead on line 10 in file ... in Config.php on line 564
NOTICEエラーなのでerror_reporting(0);とか書いておけばもちろん非表示に出来ますがそれだと気持ち悪いので修正しました。
setメソッドに渡す値を引数で連結せずに.(ドット)で連結するとエラーが消えるみたいです。
修正したコードは以下の通りです。
// HTMLPurifierを生成する $dirty_str = 'hogehoge'; $config = HTMLPurifier_Config::createDefault(); $config->set('Core.Encoding', 'UTF-8'); $config->set('Core.Language', 'ja'); $config->set('Attr.AllowedFrameTargets', array('_blank','_self')); $hp = new HTMLPurifier($config); //危険なHTMLタグを無効化 $clean_str = $hp->purify( $dirty_str );