人気記事

広告

記事検索

MOVION.netについて

WEB技術に関することや、気になるWEBサイトなどについて個人的なメモを残すためのブログです。

その他運営サイト

かかわっているサイト

assign時にデフォルトでhtmlspecialcharsを行うようにする

個人的にお遊びサイトを開発中(ポンティ)なのですが、
ふとタグを入れて投稿したらhtmlエスケープされてない・・・。
駄目駄目じゃないっすか。

普段、標準でエスケープされるフレームワークを使ってて、
久しぶりにSmartyを使ったもんだから、
Smartyってデフォルトでエスケープされなかったっけ?
と思ってしまいました。

Smartyにdefault_modifiersってのがあるようなので、
それでもできそうですが、なんかめんどくさそうだったので(http://blog.asial.co.jp/309)、
assignの時にエスケープするようにしてみました。

フレームワークはZend Frameworkを使ってて、Smarty用Viewの具象クラスはもちろん作ってたので、
そこに手を加えてみました。
Zend FrameworkでSmartyを使う方法などはZendのドキュメントなどを参照のこと。

  1. require_once ‘Zend/View/Interface.php’;
  2. require_once ‘Smarty.class.php’;
  3.  
  4. class Pontiy_View_Smarty implements Zend_View_Interface
  5. {
  6.         protected $_smarty;
  7.  
  8. // 大部分省略してます
  9.         public function assign($spec, $value = null)
  10.         {
  11.                 if (is_array($spec)) {
  12.                         $spec = $this->h($spec);
  13.                         $this->_smarty->assign($spec);
  14.                         return;
  15.                 }
  16.                 $value = $this->h($value);
  17.                 $this->_smarty->assign($spec, $value);
  18.         }
  19.  
  20.         public function assignNoEscape($spec, $value = null)
  21.         {
  22.                 if (is_array($spec)) {
  23.                         $this->_smarty->assign($spec);
  24.                         return;
  25.                 }
  26.                 $this->_smarty->assign($spec, $value);
  27.         }
  28.  
  29.         private function h($string){
  30.             if(is_array($string)){
  31.                 return array_map(array($this,‘h’),$string);
  32.             }else{
  33.                 return htmlspecialchars($string,ENT_QUOTES);
  34.             }
  35.         }
  36.  
  37. }

hメソッドは関数でよいのだけど、基本関数群を置く場所を考えてなかったので、
とりあえずクラスの中につっこんでしまいました・・・。

add to hatena hatena.comment add to del.icio.us add to livedoor.clip add to Yahoo!Bookmark

この記事にはまだコメントがついていません。

Comment Feed Comment feed for this entry

Trackback URI :

コメントをどうぞ

段落や改行は自動挿入です。メールアドレスはサイト上では非表示です。