php 過濾器實現代碼_PHP教程

來源:互聯網
上載者:User
在以前,一個使用者通過網路主要是擷取資訊。而如今的網路剛更注重與使用者的互動,使用者不再僅僅是網站的瀏覽者,也是網站內容的製造者。由以前單純的“讀”向“寫”以及“共同創作”發展,由被動接收資訊向主動分行資訊發展。而隨之而來的安全問題也成了web開發人員不可忽視的問題,驗證第三方來源的資料成了每個web程式必不可少的功能。

在以前,PHP需要驗證資料,一般都是程式員自己通過Regex實現,而從PHP從5.2開始把原本的PCEL中的filter函數移到了內建庫中,並做了不少強化,可以用這些函數實現對資料的過濾和驗證。

資料來源及驗證類型
PHP中的資料來源包含兩部分,其一是外部變數(如POST、GET、COOKIE等),還有一種是頁面內部產生的資料。PHP針對這兩種資料類型分別定義了ilter_input_**和filter_var_**系列函數。而依據驗證方法的不一樣又可以分為Validating和Sanitizing兩種。Validating用於驗證資料,返回一個布爾值。Sanitizing則按規則過濾一些特定的字元,返回的是處理後的字串。

簡單用法
比如驗證一個字串是否是一個整數,在以往我們可以通過Regex或是is_numeric函數實現:

複製代碼 代碼如下:
$str = '51ab';
preg_match('/^[0-9]*$/', $str);
is_numeric($str);

新的驗證函式可以用以下方式:

$str = '51ab';
echo filter_var($str, FILTER_VALIDATE_INT) ? 'is valid' : 'is not valid';FILTER_VALIDATE_INT是PHP定義的一個過濾器,用於驗證$str是否為一個整數。實際上這就是一個數值常量,通過echo FILTER_VALIDATE_INT;發現值為257。所以我們也可以用:

$str = '51ab';
echo filter_var($str, 257) ? 'is valid' : 'is not valid';PHP中定義了大量常用的過濾器,我們可以通過filter_list()獲得所有支援的過濾器名稱(用字串表示),然後再用filter_id(string)擷取其數值:

print_r(filter_list()); // 所有支援的過濾器名稱。
echo '=========';
echo filter_id('int'); // 'int' 是filter_list返回的一個過濾器名稱。以上將輸入出類似以下內容:

array(0=>int',1=>'boolean',2=>'float',3=>'validate_regexp')
==========
257Sanitizing過濾器
上面這個是驗證資料格式是否正確,有時候過濾掉無關的內容也是挺重要的。SANITIZE過濾提供了這種功能,比如過濾掉一個email中多餘的字元:

$email = '

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.