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