[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 メーリングリストの案内