《過濾器(ZendFilter).ppt》由會員分享,可在線閱讀,更多相關《過濾器(ZendFilter).ppt(16頁珍藏版)》請在裝配圖網上搜索。
1、第10章 過濾器(Zend_Filter),過濾器(Filter)是對輸入內容進行過濾,清除其中不符合過濾規(guī)則的內容,并將其余內容返回的過程。過濾器這一機制廣泛應用于Web用戶互動程序中,通過過濾器可以對用戶的輸入內容進行無害化處理。最常使用的就是清除指定內容中的HTML代碼,或者其中的回車換行符等。Zend Framework也提供了對過濾器的支持,使用Zend_Filter組件即可實現過濾器的功能。本章來介紹Zend Framework中的Zend_Filter過濾器組件。,10.1 過濾器的使用方法,對引言中過濾器的基本定義進行延伸,過濾器除了清除內容之外還包括一般化的對輸入數據的轉化。
2、作為使用過濾器的第一步,本節(jié)先來介紹過濾器的通常使用方法。本節(jié)內容包括如何使用單個過濾器與如何使用過濾器鏈。通過本節(jié)的介紹,讀者會對如何使用過濾器有一個深刻的認識。,10.1.1 使用單個過濾器,Zend_Filter中有一個Zend_Filter_Interface子類,該子類為實現一般過濾器提供了接口。要實現過濾器類,需要實現該接口中一個名為filter()的方法。通過filter()方法過濾掉指定內容中不需要的部分即可。 Zend_Filter中已經事先定義了很多常用的過濾器子類。要使用這些過濾器,首先要加載相應的組件,然后為類實例化對象,再調用對象的filter()方法即可。,,10.
3、1.2 使用過濾器鏈,過濾器除了單個使用之外,還可以將多個過濾器串連起來配合使用。過濾器鏈就是多個過濾器的一個連接。在對指定的內容進行過濾時,每個過濾器將按照其順序分別進行過濾或者轉化操作。當所有的過濾操作都被進行完時,過濾器鏈返回最終的過濾結果。 過濾器鏈與單一的過濾器一樣,也可以執(zhí)行Filter()方法,調用此方法即可對指定數據進行多重過濾或者轉化操作。,10.2 常用的預定義過濾器,名稱過濾內容Alnum所有非字母或數字的內容Alpha所有非字母的內容BaseName給定路徑所有非文件名部分Digits所有非數值的內容Dir給定路徑所有非目錄部分HtmlEntities替換HTML標記符
4、:“”Input(該過濾器較為特殊,將在10.3小節(jié)詳細介紹)Int非整數的內容RealPath所有非規(guī)范化的絕對路徑名StringToLower字母全部轉換為小寫StringToUpper字母全部轉換為大寫StringTrim字符串首尾的空格StripTags去除字符串的HTML內容表10.1中的Alpha、StringToLower、StringToUpper過濾器在前兩節(jié)介紹實例中已經做了介紹。本節(jié)將重點介紹剩余的Alnum、HtmlEntities、Int與StripTags過濾器。另外,Input過濾器比較特殊,將在本章10.3節(jié)中詳細介紹。除此之外的過濾器使用都非常簡單,這里不再贅
5、述。,10.2.1 Alnum字母或數值過濾器,使用Zend_Filter_Alnum過濾器可以對給定內容中的非數字也非字母的內容進行過濾。通過該過濾器的Filter()方法,將返回純數字與字母的內容,除此之外的其他內容都將被過濾。該過濾器可以看作是過濾器Zend_Filter_Alpha(過濾非字母)與Zend_Filter_Digits(過濾非數值)的并集。,,10.2.2 HtmlEntities HTML過濾器,Zend_Filter_HtmlEntities過濾器可以對給定內容中的HTML代碼進行過濾。該過濾器是對PHP函數:htmlentities()進行了封裝,所以通過此過濾器的
6、HTML內容都將被過濾掉。,,10.2.3 Int整型數過濾器,Zend_Filter過濾器中的Int過濾器可以對指定的數值進行整型轉換,即將非整部分過濾掉。該過濾器對要求輸入的內容僅為整數時就非常有用。,,10.2.4 StripTags HTML字符過濾器,Zend_Filter_StripTags過濾器的作用是將字符串中的HTML內容進行刪除。該過濾器與Zend_Filter_HtmlEntities過濾器不同,后者只是將“”符號進行轉換。而Zend_Filter_StripTags過濾器則是直接過濾掉被“”符號所包括的內容。,,10.3 Zend_Filter_Input過濾器,在所有
7、的預定義過濾器中,Zend_Filter_Input是最為特殊的一類過濾器。該過濾器的使用方法與其他過濾器的使用方法有很大不同,該過濾器專門用于實現對互動程序中用戶輸入數據的過濾。要實現該過濾器通常要分以下幾步: 定義過濾與校驗規(guī)則。 創(chuàng)建過濾與校驗處理器。 檢索處理后的字段與其他報告內容。 本節(jié)就按照上述使用順序來詳細介紹如何使用Zend_Filter_Input進行過濾操作。其中提到了關于校驗器的知識,關于這部分內容將在本書第派遣11章詳細介紹。,10.3.1 定義過濾與校驗規(guī)則,在創(chuàng)建一個Zend_Filter_Input類的實例之前,需要為該過濾器分別創(chuàng)建過濾規(guī)則與校驗規(guī)則數組。其中兩
8、個數組的鍵與值,為需要獲取前臺表單的表單項名稱,與相應對其進行處理的子類名稱。 如對用戶輸入的用戶名進行小寫轉換(StringToLower),對用戶輸入的年齡進行非數值過濾(Digits)。另外,還需要對用戶進行是否為字母的校驗。,,,10.3.2 創(chuàng)建Input過濾器,在定義完過濾與校驗規(guī)則之后,就可以創(chuàng)建Zend_Filter_Input過濾器了。該創(chuàng)建過程只需要為Zend_Filter_Input類使用new關鍵字實例化對象即可。在實例化對象時需要指明所定義的過濾與校驗規(guī)則。,10.3.3 檢索處理后的字段與其他內容,在定義了Zend_Filter_Input過濾器之后,就可以通過多種
9、方法來獲取其中的各項內容。其中包括無效內容(Invalid)、丟失的內容(Missing)和未知的內容(Unknown)等。當然最重要的還是返回經過處理之后的內容。,10.3.4 實戰(zhàn)Zend_Filter_Input,前面三節(jié)為讀者介紹了使用Zend_Filter_Input過濾器的過程。本節(jié)通過一個可執(zhí)行的實例來實際應用一下此過濾器。,10.4 創(chuàng)建自定義過濾器,通過對10.2節(jié)中的常用預定義過濾器的學習可以發(fā)現,Zend_Filter組件中已經預定義了很多常用的過濾器。但是僅憑這些系統(tǒng)預定義過濾器有時并不能完全滿足實際編程環(huán)境的需要。此時,用戶可以通過自定義過濾器來滿足自己更多的需要。Z
10、end_Filter支持自定義過濾器。本節(jié)就來介紹如何實現自定義過濾器。 要編寫自定義過濾器,需要定義一個類,并引用Zend_Filter_Interface接口。該接口定義了filter()方法,這個方法可以在用戶的類里被實現。用Zend_Filter::addFilter()可以把一個實現這個接口的對象添加到過濾器鏈。,10.5 小結,本章介紹了Zend Framework中的過濾器組件。使用Zend_Filter可以有效過濾用戶的輸入數據,這種機制廣泛應用于互動網絡應用程序中。使用過濾器過濾掉或者轉化用戶所輸入內容中的不合規(guī)則成份,一方面可以減輕程序對無用數據進行不必要的處理。另一方面也可以在某種程度上提高程序的安全性。,