assign時にデフォルトでhtmlspecialcharsを行うようにする
個人的にお遊びサイトを開発中(ポンティ)なのですが、
ふとタグを入れて投稿したらhtmlエスケープされてない・・・。
駄目駄目じゃないっすか。
普段、標準でエスケープされるフレームワークを使ってて、
久しぶりにSmartyを使ったもんだから、
Smartyってデフォルトでエスケープされなかったっけ?
と思ってしまいました。
Smartyにdefault_modifiersってのがあるようなので、
それでもできそうですが、なんかめんどくさそうだったので(http://blog.asial.co.jp/309)、
assignの時にエスケープするようにしてみました。
フレームワークはZend Frameworkを使ってて、Smarty用Viewの具象クラスはもちろん作ってたので、
そこに手を加えてみました。
Zend FrameworkでSmartyを使う方法などはZendのドキュメントなどを参照のこと。
-
require_once ‘Zend/View/Interface.php’;
-
require_once ‘Smarty.class.php’;
-
-
class Pontiy_View_Smarty implements Zend_View_Interface
-
{
-
protected $_smarty;
-
-
// 大部分省略してます
-
public function assign($spec, $value = null)
-
{
-
$spec = $this->h($spec);
-
$this->_smarty->assign($spec);
-
return;
-
}
-
$value = $this->h($value);
-
$this->_smarty->assign($spec, $value);
-
}
-
-
public function assignNoEscape($spec, $value = null)
-
{
-
$this->_smarty->assign($spec);
-
return;
-
}
-
$this->_smarty->assign($spec, $value);
-
}
-
-
private function h($string){
-
}else{
-
}
-
}
-
-
}
hメソッドは関数でよいのだけど、基本関数群を置く場所を考えてなかったので、
とりあえずクラスの中につっこんでしまいました・・・。