2012年5月11日金曜日

SJIS で HTMLPurifier を使う悩み

ひさしぶりの書き込みです^^;

今回管理画面から設定するメッセージにHTMLを使用できるようにしました。
携帯サイトがあるので文字コードは SJIS です。

管理画面からの入力なので、比較的セキュリティは緩くてもいいかなと思ったのですが、何買ったら心配なので HTML Purifier にて、ヤバいタグや属性を除去するように。

$config = HTMLPurifier_Config::createDefault();
$config->set( 'Core.Encoding', 'SJIS' );
$config->set( 'Core.Language', 'ja' );
$config->set( 'HTML.AllowedElements', $g_aryHTMLPurifierAllowTag );
$objPurifier = new HTMLPurifier( $config );
$str = $objPurifier->purify( $str );

ここで困ったのが © や ® などの HTML 特殊文字です。

フォームからはちゃんと © や ® という形で送られてくるのですが HTML Purifier を通すと消えてなくなっている・・・

で調べてみると、HTML  Purifier は、© や ® を © や ® に変換してしまうことが判明、また、set( 'Core.Encoding', 'SJIS' ); していると SJIS に変換できない文字は消してしまうようです。

とりあえず、© ® を別のキーワード(全角が安全?)に変換してから purify() してその後に戻してやるというヤクザな方法で逃げました^^;