[PHP-users 31479] Re: value属性への変数展開
Ryo Suyama
ryo @ spais.jp
2007年 2月 17日 (土) 20:29:31 JST
須山です。
> # あるときは、エスケープ済み、あるときは未 とかになると
> # エスケープ忘れたり、2重エスケープしてしまいそうです。
僕の場合はリクエストパラメータをたらいまわしにはせずに、検証用クラスで検
証を行ったうえでさらにエスケープ処理も施します。
$_POST = array('tag' => '<a href="http://yahoo.co.jp">Yahoo!</a>')
$Smarty = new Smarty();
だとして
$post = new valid($_POST);
if($post->is_exists('tag') && $post->valid_html('tag')){
$Smarty->assign('text',$post->escape_html('tag'));
}
というような実装にしています。
#boolean valid::is_exists() メソッドは要素の有無を確認
#boolean valid::valid_html() メソッドは要素の値が HTML のタグとして正しいかを検証
#string valid::escape_html() メソッドは要素の値を htmlspecialchars して返す
Smarty に限らずテンプレートエンジンで値を書き換えてしまうと、スクリプト
とテンプレートの両方で確認をしなければならず、それは僕にとってはとても面
倒です。
また「この時のこの値はエスケープしたっけなー?」という確認も面倒くさいの
で基本的に上記のように valid::escape_html() メソッドの返り値がエスケープ
処理された値で、生データは基本的にそのまま残しています。
┌─┬─┬─┬┬─┐
│─┤─│─├┤─┤
├─│┌┤││├─│
├─┴┘└┴┴┴─┤
│ 須山 亮 │
│ ryo @ spais.jp │
│http://spais.jp/│
└────────┘
PHP-users メーリングリストの案内