忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/11/19 14:02 |
ZF1.11 Zend_Filterで既存の関数を利用
前回Zend_Filterでhtmlspecialchars()できるとか言いましたが、実はZend_Filter_HtmlEntitiesはあってもZend_Filter_HtmlSpecialcharsはありませんでした。
あれれ。

このような場合、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')が実行され、返り値は'&lt;script&gt;alert();&lt;/script&gt;'となります。

まあ関数ひとつで実行可能な変換をわざわざZend_Filterを通して実行する意味があるのかどうかわかりませんが。
PR


2011/09/02 22:39 | Comments(0) | TrackBack(1) | PHP

トラックバック

トラックバックURL:
前回前々回Zend_Filterを紹介しましたが、実はリファレンスにはフィルタクラス群のリストに載っていない謎のクラス群が存在します。 Zend_Filter_Word_UnderscoreToDash、Zend_Filter_Word_CamelCaseToSeparatorなどZend_Filter_Word配下に属するクラス群です。 まあ謎と言っても実はインフレクタのほうに載ってるんですが。 しかしこの解説、何言ってるのか全然わからないのですが、簡単に言うと文字列変換を行うフィル...
弱小PHPerの憂鬱 | 2011/09/05 22:46

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2011/09/04 | HOME | ZF1.11 Zend_Filter>>
忍者ブログ[PR]