<?php
/** 
* 文字エンコーディング入力フィルタ
*
* PHP version 5
*
* @package    filters
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/

class EncodingInputFilter implements IFilter
{
	var $_config;
	var $_output_filters;

	/*
	 *    コンストラクタ
	 */
	public function __construct()
	{
	}

	/*
	 * フィルタ名を取得
	 */
	public function getFilterName()
	{
		return "Encoding Input Filter";
	}

	/*
	 * フィルタを初期化する
	 */
	public function init( Config $config )
	{
	}

	/*
	 * フィルタを行う
	 */
	public function filter( IRequest $request, ProcedureContext $context, Response $response ){

		log_info( "system",  "EncodingInputFilterを実行します。", __FILE__, __LINE__ );

		// EncodingConverterを作成
		$conv = EncodingConverter::fromString( 'HTML_TO_PHP' );

		// requestの中身をすべてエンコーディング変換
		$keys = $request->getKeys();
		foreach( $keys as $key ){
			$value = $request->get( $key );
			if ( is_string($value) ){
				$value = $conv->convertEncoding($value);
				$request->set( $key, $value );
			}
			else if ( is_array($value) ){
				$this->_convertEncodingArray( $value, $conv, 1 );
			}
		}

		log_info( "system",  "EncodingInputFilterを実行が完了しました。", __FILE__, __LINE__ );

	}

	/*
	 * 配列のエンコーディング変換（再帰メソッド）
	 */
	private function _convertEncodingArray( $ary, EncodingConverter $conv, $level ){

		foreach( $ary as $key => $value ){
			if ( is_string($value) ){
				$value = $conv->convertEncoding($value);
				$ary[ $key ] = $value;
			}
			else if ( is_array($value) ){
				$this->_convertEncodingArray( $value, $conv, $level + 1 );
			}
		}

	}

}

?>