PHP內(nèi)置過(guò)濾器FILTER使用實(shí)例
在這一章節(jié)里, 我們來(lái)了解一個(gè)不太常用但功能強(qiáng)大的 PHP 特性: FILTERS, 該擴(kuò)展可以用來(lái)驗(yàn)證(validation)和糾錯(cuò)(sanitization)
當(dāng)數(shù)據(jù)源含有未知或不確定數(shù)據(jù)時(shí),將變得非常有用, 最多是用來(lái)處理由客戶從 HTML 表單(form)提交的數(shù)據(jù)
該擴(kuò)展含有兩個(gè)主要的過(guò)濾類型: 驗(yàn)證(validation)和糾錯(cuò)(sanitization)
驗(yàn)證(validation)主要用來(lái)檢查數(shù)據(jù)是不是符合特定條件, 例如: 當(dāng)傳入 FILTER_VALIDATE_EMAIL 時(shí), 它將檢查該郵件地址是否有效, 當(dāng)發(fā)現(xiàn)不符合規(guī)范時(shí), 不會(huì)進(jìn)行糾錯(cuò)處理
糾錯(cuò)(sanitization)將會(huì)對(duì)數(shù)據(jù)進(jìn)行處理, 將不符合規(guī)范的字符進(jìn)行轉(zhuǎn)換或移除, 例如: 當(dāng)傳入 FILTER_SANITIZE_EMAIL 時(shí), 它將會(huì)處理郵件地址所包含不符合規(guī)范的字符, 但不會(huì)去檢查該郵件地址是否有效
詳細(xì)可見(jiàn): http://in.php.net/manual/en/book.filter.php
提示: FILTER 在 PHP 5.2 版本中被加入
這里介紹一下驗(yàn)證(validation) Filters
FILTER_VALIDATE_EMAIL: 把值作為郵件地址來(lái)驗(yàn)證
FILTER_VALIDATE_FLOAT: 把值作為浮點(diǎn)數(shù)來(lái)驗(yàn)證
FILTER_VALIDATE_INT: 以整數(shù)驗(yàn)證值,可以選擇范圍
FILTER_VALIDATE_IP: 把值作為 IP 進(jìn)行驗(yàn)證
FILTER_VALIDATE_REGEXP: 根據(jù)兼容 Perl 的正則表達(dá)式來(lái)驗(yàn)證值
FILTER_VALIDATE_URL: 把值作為 URL 進(jìn)行驗(yàn)證
范例:
驗(yàn)證郵件地址(Email Address):
<?php
$email_a = 'onedayin2013@shawn.com';
$email_b = 'invalid@email';
if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) {
echo "This ($email_a) email address is valid.";
} else {
echo "This ($email_a) email address is invalid.";
}
if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) {
echo "This ($email_b) email address is valid.";
} else {
echo "This ($email_b) email address is invalid.";
}
//輸出以下內(nèi)容:
This (onedayin2013@shawn.com) email address is valid.
This (invalid@email) email address is invalid.
?>
驗(yàn)證 IP 地址:
$ip_a = '127.0.0.1';
$ip_b = '52.69';
if (filter_var($ip_a, FILTER_VALIDATE_IP)) {
echo "This ($ip_a) IP address is valid.";
}else{
echo "This ($ip_a) IP address is invalid.";
}
if (filter_var($ip_b, FILTER_VALIDATE_IP)) {
echo "This ($ip_b) IP address is valid.";
}else{
echo "This ($ip_b) IP address is invalid.";
}
//輸出以下內(nèi)容:
This (127.0.0.1) IP address is valid.
This (52.69) IP address is invalid.
?>
糾錯(cuò)(sanitization) Filters
FILTER_SANITIZE_ENCODED: 去除 URL 編碼不需要的字符, 與 urlencode() 函數(shù)很類似
FILTER_SANITIZE_MAGIC_QUOTES: 在指定的預(yù)定義字符前添加反斜杠, 單引號(hào)(')、雙引號(hào)(")、反斜線(\)與 NULL
FILTER_SANITIZE_NUMBER_FLOAT: 移除所有字符, 除了數(shù)字,+- 和可選(.,)
FILTER_SANITIZE_NUMBER_INT: 移除所有字符, 除了數(shù)字和 +-
FILTER_SANITIZE_SPECIAL_CHARS: 用于對(duì) "<>& 以及 ASCII 值在 32 值以下的字符進(jìn)行轉(zhuǎn)義
FILTER_SANITIZE_STRING: 刪除那些對(duì)應(yīng)用程序有潛在危害的數(shù)據(jù)。它用于去除標(biāo)簽以及刪除或編碼不需要的字符
FILTER_SANITIZE_STRIPPED: 去除或編碼不需要的字符,是 FILTER_SANITIZE_STRING 的別名
FILTER_SANITIZE_URL: 移除所有字符, 除了字母,數(shù)字和 $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=.
FILTER_UNSAFE_RAW: 不進(jìn)行任何過(guò)濾,去除或編碼特殊字符
范例:
$invalid_email = "(corrupted@foo dot com)";
if (!filter_var($invalid_email, FILTER_VALIDATE_EMAIL)) {
$sanitized_email = filter_var($invalid_email, FILTER_SANITIZE_EMAIL);
echo "This ($invalid_email) email address is invalid.";
echo "Sanitized Email is: $sanitized_email";
}
//輸出以下內(nèi)容:
This ((corrupted@foo dot com)) email address is invalid.
Sanitized Email is: corrupted@foo.com
?>
過(guò)濾 GET 和 POST 變量
//函數(shù)從腳本外部獲取輸入,用于對(duì)來(lái)自非安全來(lái)源的變量進(jìn)行驗(yàn)證,比如用戶的輸入
//可以從以下來(lái)源獲取輸入
INPUT_GET INPUT_POST INPUT_COOKIE INPUT_ENV INPUT_SERVER
variable 規(guī)定要過(guò)濾的變量
filter 可選。規(guī)定要使用的過(guò)濾器的 ID。默認(rèn)是 FILTER_SANITIZE_STRING。
范例:
$search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
$search_url = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_ENCODED);
echo "You have searched for $search_html.";
echo "<a href="sunzhenghua.com?search=$search_url">Search again.</a>";
?>
相關(guān)文章
php批量轉(zhuǎn)換文件夾下所有文件編碼的函數(shù)類
分享一個(gè)php轉(zhuǎn)換文件夾下所有文件編碼函數(shù)類,適合發(fā)布網(wǎng)站的其他編碼版本,比如你有一個(gè)GBK版本 你想有一個(gè)UTF8版本 或者你只有GBK的源碼 你想二次開(kāi)發(fā) 但是你不想改變IDE的編碼方式 你可以用這個(gè)程序?qū)⑵渑哭D(zhuǎn)化為UTF82017-08-08
修復(fù)ShopNC使用QQ 互聯(lián)時(shí)提示100010 錯(cuò)誤
本文給大家介紹了修復(fù)ShopNC使用QQ 互聯(lián)時(shí)提示100010 錯(cuò)誤的方法,以及QQ互聯(lián)里面的處理方法,有需要的小伙伴可以參考下2015-11-11
PHP讀取TXT文本內(nèi)容的五種實(shí)用方法小結(jié)
PHP作為一種流行的服務(wù)器端腳本語(yǔ)言,提供了多種方法來(lái)讀取TXT文本內(nèi)容,本文主要為大家詳細(xì)介紹五種不同的PHP方法,希望對(duì)大家有所幫助2024-01-01
PHP+Mysql日期時(shí)間如何轉(zhuǎn)換(UNIX時(shí)間戳和格式化日期)
UNIX時(shí)間戳和格式化日期是我們常打交道的兩個(gè)時(shí)間表示形式,Unix時(shí)間戳存儲(chǔ)、處理方便,但是不直觀,格式化日期直觀,但是處理起來(lái)不如Unix時(shí)間戳那么自如,所以有的時(shí)候需要互相轉(zhuǎn)換,下面給出互相轉(zhuǎn)換的幾種轉(zhuǎn)換方式2012-07-07
PHP如何獲取Cookie并實(shí)現(xiàn)模擬登錄
這篇文章主要介紹了PHP如何獲取Cookie并實(shí)現(xiàn)模擬登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07

