Zend Framework の紹介

 Learning Zend Framework

appendix

 Zend Framework リファレンス


  • 第36章 Zend_Gdata
  • 第37章 Zend_Http
  • 第38章 Zend_InfoCard
  • 第39章 Zend_Json
  • 第40章 Zend_Layout
  • 第41章 Zend_Ldap
  • 第42章 Zend_Loader
  • 第43章 Zend_Locale
  • 第44章 Zend_Log
  • 第45章 Zend_Mail
  • 第46章 Zend_Markup
  • 第47章 Zend_Measure
  • 第48章 Zend_Memory
  • 第49章 Zend_Mime
  • 第50章 Zend_Navigation
  • 第51章 Zend_Oauth
  • 第52章 Zend_OpenId
  • 第53章 Zend_Paginator
  • 第54章 Zend_Pdf
  • 第55章 Zend_ProgressBar
  • 第56章 Zend_Queue
  • 第57章 Zend_Reflection
  • 第58章 Zend_Registry
  • 第59章 Zend_Rest

  • 第60章 Zend_Search_Lucene
  • 第61章 Zend_Serializer
  • 第62章 Zend_Server
  • 第63章 Zend_Service
  • 第64章 Zend_Session
  • 第65章 Zend_Soap
  • 第66章 Zend_Tag
  • 第67章 Zend_Test
  • 第68章 Zend_Text
  • 第69章 Zend_TimeSync
  • 第70章 Zend_Tool
  • 第71章 Zend_Tool_Framework
  • 第72章 Zend_Tool_Project
  • 第73章 Zend_Translate
  • 第74章 Zend_Uri
  • 第75章 Zend_Validate
  • 第76章 Zend_Version
  • 第77章 Zend_View
  • 第78章 Zend_Wildfire
  • 第79章 Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 70.6% Update 2010-11-28 - Revision 23415

    第34章 Zend_Filter

    目次

    34.1. 導入
    34.1.1. フィルタとは?
    34.1.2. フィルタの基本的な使用法
    34.1.3. 静的メソッド staticFilter() の使用法
    34.1.3.1. 名前空間
    34.1.4. Double filtering
    34.2. 標準のフィルタクラス群
    34.2.1. Alnum
    34.2.1.1. Supported options for Zend_Filter_Alnum
    34.2.1.2. Basic usage
    34.2.1.3. Allow whitespaces
    34.2.2. Alpha
    34.2.2.1. Supported options for Zend_Filter_Alpha
    34.2.2.2. Basic usage
    34.2.2.3. Allow whitespace characters
    34.2.3. BaseName
    34.2.3.1. Supported options for Zend_Filter_BaseName
    34.2.3.2. Basic usage
    34.2.4. Boolean
    34.2.4.1. Supported options for Zend_Filter_Boolean
    34.2.4.2. Default behaviour for Zend_Filter_Boolean
    34.2.4.3. Changing behaviour for Zend_Filter_Boolean
    34.2.4.4. Localized booleans
    34.2.4.5. Disable casting
    34.2.5. Callback
    34.2.5.1. Supported options for Zend_Filter_Callback
    34.2.5.2. Basic usage
    34.2.5.3. Default parameters within a callback
    34.2.6. Compress and Decompress
    34.2.6.1. Supported options for Zend_Filter_Compress and Zend_Filter_Decompress
    34.2.6.2. Supported compression adapters
    34.2.6.3. Generic handling
    34.2.6.4. Creating an archive
    34.2.6.5. Decompressing an archive
    34.2.6.6. Bz2 Adapter
    34.2.6.7. Gz Adapter
    34.2.6.8. Lzf Adapter
    34.2.6.9. Rar Adapter
    34.2.6.10. Tar Adapter
    34.2.6.11. Zip Adapter
    34.2.7. Digits
    34.2.7.1. Supported options for Zend_Filter_Digits
    34.2.7.2. Basic usage
    34.2.8. Dir
    34.2.8.1. Supported options for Zend_Filter_Dir
    34.2.8.2. Basic usage
    34.2.9. Encrypt and Decrypt
    34.2.9.1. Supported options for Zend_Filter_Encrypt and Zend_Filter_Decrypt
    34.2.9.2. Adapter usage
    34.2.9.3. Encryption with Mcrypt
    34.2.9.4. Decryption with Mcrypt
    34.2.9.5. Encryption with OpenSSL
    34.2.9.5.1. Simplified usage with Openssl
    34.2.9.5.2. Compressing the content
    34.2.9.6. Decryption with OpenSSL
    34.2.10. HtmlEntities
    34.2.10.1. Supported options for Zend_Filter_HtmlEntities
    34.2.10.2. Basic usage
    34.2.10.3. Quote Style
    34.2.10.4. Helper Methods
    34.2.11. Int
    34.2.11.1. Supported options for Zend_Filter_Int
    34.2.11.2. Basic usage
    34.2.12. LocalizedToNormalized and NormalizedToLocalized
    34.2.12.1. Supported options for Zend_Filter_LocalizedToNormalized and Zend_Filter_NormalizedToLocalized
    34.2.12.2. Workflow
    34.2.12.3. Normalization for numbers
    34.2.12.4. Normalization for date and time
    34.2.12.5. Localization for numbers
    34.2.12.6. Localization for date and time
    34.2.13. Null
    34.2.13.1. Supported options for Zend_Filter_Null
    34.2.13.2. Zend_Filter_Null の既定の振る舞い
    34.2.13.3. Zend_Filter_Null の振る舞いの変更
    34.2.14. PregReplace
    34.2.14.1. Supported options for Zend_Filter_PregReplace
    34.2.14.2. Basic usage
    34.2.15. RealPath
    34.2.15.1. Supported options for Zend_Filter_RealPath
    34.2.15.2. Basic usage
    34.2.15.3. Non existing paths
    34.2.16. StringToLower
    34.2.16.1. Supported options for Zend_Filter_StringToLower
    34.2.16.2. Basic usage
    34.2.16.3. Different encoded strings
    34.2.17. StringToUpper
    34.2.17.1. Supported options for Zend_Filter_StringToUpper
    34.2.17.2. Basic usage
    34.2.17.3. Different encoded strings
    34.2.18. StringTrim
    34.2.18.1. Supported options for Zend_Filter_StringTrim
    34.2.18.2. Basic usage
    34.2.18.3. Default behaviour for Zend_Filter_StringTrim
    34.2.19. StripNewLines
    34.2.19.1. Supported options for Zend_Filter_StripNewLines
    34.2.19.2. Basic usage
    34.2.20. StripTags
    34.2.20.1. Supported options for Zend_Filter_StripTags
    34.2.20.2. Basic usage
    34.2.20.3. Allowing defined tags
    34.2.20.4. Allowing defined attributes
    34.3. フィルタチェイン
    34.3.1. Changing filter chain order
    34.4. フィルタの書き方
    34.5. Zend_Filter_Input
    34.5.1. フィルタルールおよび検証ルールの宣言
    34.5.2. フィルタおよびバリデータの処理装置の作成
    34.5.3. 検証済みのフィールドやその他の結果情報の取得
    34.5.3.1. 入力が妥当かどうかの問い合わせ
    34.5.3.2. 無効なフィールド、存在しないフィールド、未知のフィールドの取得
    34.5.3.3. 有効なフィールドの取得
    34.5.4. メタコマンドによるフィルタルールやバリデータルールの制御
    34.5.4.1. FIELDS メタコマンド
    34.5.4.2. PRESENCE メタコマンド
    34.5.4.3. DEFAULT_VALUE メタコマンド
    34.5.4.4. ALLOW_EMPTY メタコマンド
    34.5.4.5. BREAK_CHAIN メタコマンド
    34.5.4.6. MESSAGES メタコマンド
    34.5.4.7. オプションの使用による、全ルールへのメタコマンドの設定
    34.5.5. フィルタクラスへの名前空間の追加
    34.6. Zend_Filter_Inflector
    34.6.1. 操作
    34.6.2. その他のフィルタ向けのパスの設定
    34.6.3. インフレクタのターゲットの設定
    34.6.4. インフレクションのルール
    34.6.4.1. 静的なルール
    34.6.4.2. Filter Inflector ルール
    34.6.4.3. 多くのルールを一度に設定する
    34.6.5. ユーティリティメソッド
    34.6.6. Zend_Filter_Inflector での Zend_Config の使用法

    34.1. 導入

    Zend_Filter コンポーネントは、データのフィルタリングに必要となる一般的な機能を提供します。 シンプルなフィルタチェイン機能も持っており、 ひとつのデータに対して複数のフィルタを指定した順に適用できます。

    34.1.1. フィルタとは?

    自然界におけるフィルタの典型的な使用法は、 入力から不要な部分を除去して必要なものだけを出力することです (例: コーヒーのフィルタ)。 このような場合、フィルタは入力の一部を取り出すための演算子となります。 この型のフィルタリングはウェブアプリケーションで有用です。 たとえば不正な入力を除去したり、余分な空白を除去したりといったことが考えられます。

    この基本的なフィルタの定義を拡張して、入力に一般的な変換を加える処理もフィルタに含めることにしましょう。 ウェブアプリケーションでよくある変換は、HTML エンティティのエスケープ処理です。 たとえば (ウェブブラウザなどからの) 信頼できない入力をもとにして フォームのフィールドに値を自動的に埋め込む場合は、その値には HTML エンティティが含まれてはいけません。あるいはもし含むならそれをエスケープしておかなければなりません。 これにより、予期せぬ振る舞いを起こすことを防ぎ、 セキュリティ上の脆弱性も防ぎます。 この要求を満たすには、入力に含まれる HTML エンティティを削除あるいはエスケープしなければなりません。 もちろん、どちらの方式が適切かはその場の状況に依存します。 HTML エンティティを除去するフィルタは、最初に定義したフィルタの考え方 - 入力の一部を取り出すための演算子 - にもとづくものです。 一方、HTML エンティティをエスケープするフィルタは、入力を変換するタイプのものです (たとえば "&" は "&" に変換されます)。 これらの例のような処理はウェブ開発者にとって重要です。 Zend_Filter で "フィルタリングする" という場合、 それは入力データに対して何らかの変換を行うことを意味します。

    34.1.2. フィルタの基本的な使用法

    ここで考えたフィルタについての定義をもとにして Zend_Filter_Interface が作成されました。 これは、フィルタクラスに対して filter() という名前のメソッドを実装するよう強制するものです。

    以下の例は、アンパサンド (&) およびダブルクォート (") の二つの入力データに対してフィルタを適用するものです。

    $htmlEntities = new Zend_Filter_HtmlEntities();

    echo 
    $htmlEntities->filter('&'); // &
    echo $htmlEntities->filter('"'); // "

    34.1.3. 静的メソッド staticFilter() の使用法

    指定したフィルタクラスを読み込んでそのインスタンスを作成するというのが面倒ならば、 もうひとつの方法として、静的メソッド Zend_Filter::filterStatic() を実行する方法もあります。このメソッドの最初の引数には、 filter() メソッドに渡す入力値を指定します。 二番目の引数は文字列で、フィルタクラスのベースネーム (Zend_Filter 名前空間における相対的な名前) を指定します。 staticFilter() メソッドは自動的にクラスを読み込んでそのインスタンスを作成し、 指定した入力に対して filter() メソッドを適用します。

    echo Zend_Filter::filterStatic('&''HtmlEntities');

    フィルタクラスのコンストラクタにオプションを指定する必要がある場合は、 それを配列で渡すことができます。

    echo Zend_Filter::filterStatic('"',
                                   
    'HtmlEntities',
                                   array(
    'quotestyle' => ENT_QUOTES));

    この静的な使用法は、その場限りのフィルタリングには便利です。 ただ、複数の入力に対してフィルタを適用するのなら、 最初の例の方式、つまりフィルタオブジェクトのインスタンスを作成して その filter() メソッドをコールする方式のほうがより効率的です。

    また、Zend_Filter_Input クラスでも、特定の入力データのセットを処理する際に 複数のフィルタやバリデータを必要に応じて実行させる機能も提供しています。 詳細は Zend_Filter_Input を参照ください。

    34.1.3.1. 名前空間

    自分で定義したフィルタを使う際に、 Zend_Filter::filterStatic() に 4 番目のパラメータを指定できます。 これは、フィルタを探すための名前空間となります。

    echo Zend_Filter::filterStatic(
        
    '"',
        
    'MyFilter',
        array(
    $parameters),
        array(
    'FirstNamespace''SecondNamespace')
    );

    Zend_Filter には、名前空間をデフォルトで設定することもできます。 つまり、起動時に一度設定しておけば Zend_Filter::filterStatic() のたびに指定する必要がなくなるということです。 次のコード片は、上のコードと同じ意味となります。

    Zend_Filter::setDefaultNamespaces(array('FirstNamespace''SecondNamespace'));
    echo 
    Zend_Filter::filterStatic('"''MyFilter', array($parameters));
    echo 
    Zend_Filter::filterStatic('"''OtherFilter', array($parameters));

    名前空間の操作のために、次のような便利なメソッド群が用意されています。

    • Zend_Filter::getDefaultNamespaces(): 設定されているすべての名前空間を配列で返します。

    • Zend_Filter::setDefaultNamespaces(): 新たなデフォルト名前空間を設定し、既存の名前空間を上書きします。 単一の名前空間の場合は文字列、複数の場合は配列で指定できます。

    • Zend_Filter::addDefaultNamespaces(): 新たな名前空間を、既に設定されているものに追加します。 単一の名前空間の場合は文字列、複数の場合は配列で指定できます。

    • Zend_Filter::hasDefaultNamespaces(): デフォルトの名前空間が設定されている場合は TRUE 、 設定されていない場合は FALSE を返します。

    34.1.4. Double filtering

    When using two filters after each other you have to keep in mind that it is often not possible to get the original output by using the opposite filter. Take the following example:

    $original "my_original_content";

    // Attach a filter
    $filter   = new Zend_Filter_Word_UnderscoreToCamelCase();
    $filtered $filter->filter($original);

    // Use it's opposite
    $filter2  = new Zend_Filter_Word_CamelCaseToUnderscore();
    $filtered $filter2->filter($filtered)

    The above code example could lead to the impression that you will get the original output after the second filter has been applied. But thinking logically this is not the case. After applying the first filter my_original_content will be changed to MyOriginalContent. But after applying the second filter the result is My_Original_Content.

    As you can see it is not always possible to get the original output by using a filter which seems to be the opposite. It depends on the filter and also on the given input.

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...