前回Zend_Filterでhtmlspecialchars()できるとか言いましたが、実はZend_Filter_HtmlEntitiesはあってもZend_Filter_HtmlSpecialcharsはありませんでした。
あれれ。
このような場合、Zend_Filterでは簡単にフィルタを追加することができます。
が、htmlspecialchars()のように既存の関数を呼ぶだけであればもっと手っ取り早い方法があります。
http://framework.zend.com/manual/1.9/ja/zend.filter.set.html#zend.filter.set.callback
上記例では3種類の呼び出し方を試していますが、いずれも最終的にhtmlspecialchars($string, ENT_QUOTES, 'UTF-8')が実行され、返り値は'<script>alert();</script>'となります。
まあ関数ひとつで実行可能な変換をわざわざZend_Filterを通して実行する意味があるのかどうかわかりませんが。
あれれ。
このような場合、Zend_Filterでは簡単にフィルタを追加することができます。
が、htmlspecialchars()のように既存の関数を呼ぶだけであればもっと手っ取り早い方法があります。
<?php
//フィルタリングする文字列
$string='<script>alert();</script>';
//Zend_Filter
require_once('Zend/Filter.php');
require_once('Zend/Filter/Callback.php');
//関数でフィルタを呼ぶ
$filter = new Zend_Filter_Callback('htmlspecialchars',array(ENT_QUOTES, 'UTF-8'));
$filter->filter($string);
//静的にフィルタを実行
Zend_Filter::filterStatic($string, 'Callback', array('htmlspecialchars',array(ENT_QUOTES, 'UTF-8')));
//フィルタチェイン
$filterChain = new Zend_Filter();
$filterChain->addFilter(new Zend_Filter_Callback('htmlspecialchars',array(ENT_QUOTES, 'UTF-8')));
$filterChain->filter($string);
Zend_Filter_Callbackは、引数に関数名もしくはクラス+メソッド名を与えることで、その関数を実行してくれます。http://framework.zend.com/manual/1.9/ja/zend.filter.set.html#zend.filter.set.callback
上記例では3種類の呼び出し方を試していますが、いずれも最終的にhtmlspecialchars($string, ENT_QUOTES, 'UTF-8')が実行され、返り値は'<script>alert();</script>'となります。
まあ関数ひとつで実行可能な変換をわざわざZend_Filterを通して実行する意味があるのかどうかわかりませんが。
PR
トラックバック
トラックバックURL: