忍者ブログ
[PR]
×

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



2024/04/26 05:34 |
ZF1.11 Zend_Filter
Zend_Filterは値のフィルタリングを行います。

Zend_Validateと違うのは、あちらはあくまで値のチェックを行うだけなのに対し、こちらは実際に値を処理するという点です。
まあ、htmlspecialchars()とかtrim()とか数値に変換したりといった操作を一元的に行えるクラスです。

使い方もZend_Validateとほぼ同じです。
filterStatic()メソッドで静的に実行できたり、フィルタチェインにはインクルードが必要なところまで同じです。
http://framework.zend.com/manual/ja/zend.filter.introduction.html
<?php
	
	//フィルタリングする文字列
        $string='ABC012<script>alert();</script>';
	
	//Zend_Filter
		require_once('Zend/Filter.php');
	
	//静的にフィルタを実行
		Zend_Filter::filterStatic($string, 'Alnum'); //「ABC012scriptalertscript」になる
		Zend_Filter::filterStatic($string, 'PregReplace', array('match'=>'/<script>/', 'replace'=>'script'));//「ABC012scriptalert();</script>」になる
	
	//フィルタチェイン
		//フィルタチェインはインクルードが必要
		require_once('Zend/Filter/Alpha.php');
		require_once('Zend/Filter/StringToLower.php');
		
		//フィルタチェインを作成
		$filterChain = new Zend_Filter();
		$filterChain
			->addFilter(new Zend_Filter_Alpha())
			->addFilter(new Zend_Filter_StringToLower());
		//実行
		$filterChain->filter($string);	//「abcscriptalertscript」になる
簡単にフィルタリングできました。

ちなみにfilterStaticの第三引数、'match''replace'には全然意味がなくて、配列の順番だけしか見ていません。
array('replace'=>'/<script>/', 'match'=>'script')って書いても全く同じ動作になります。
Zend_Filter_PregReplace自体にはif (array_key_exists('match', $options))みたいなことが書いてあるので直接呼び出せば連想配列が考慮されるのですが、Zend_Filter::filterStaticの呼び出し側がそこらへんを気にしないのでうっかり逆順に書いてたりすると事故ります。
微妙に残念。
PR


2011/08/29 22:41 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






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



<<ZF1.11 Zend_Filterで既存の関数を利用 | HOME | 買ったものリスト 2011/08/28>>
忍者ブログ[PR]