注意:FILTER_NULL_ON_FAILURE、FILTER_REQUIRE_SCALAR、FILTER_REQUIRE_ARRAY 和 FILTER_FORCE_ARRAY 沒有 "FILTER_FLAG_" 前綴,但它們是旗標!
以下常數由此擴充功能定義,並且僅在擴充功能已編譯到 PHP 中或在執行階段動態載入時才可用。
這些常數由 filter_input() 和 filter_input_array() 使用。
INPUT_POST
(整數)INPUT_GET
(整數)INPUT_ENV
(整數)INPUT_SERVER
(整數 (int))INPUT_SESSION
(整數 (int))INPUT_REQUEST
(整數 (int))FILTER_FLAG_NONE
(整數 (int))FILTER_REQUIRE_SCALAR
(整數 (int))FILTER_REQUIRE_ARRAY
(整數 (int))FILTER_FORCE_ARRAY
(整數 (int))FILTER_NULL_ON_FAILURE
(整數 (int))null
而不是 false
。 可與任何驗證 FILTER_VALIDATE_*
過濾器一起使用。 FILTER_FLAG_STRIP_LOW
(整數 (int))FILTER_FLAG_STRIP_HIGH
(整數 (int))FILTER_FLAG_STRIP_BACKTICK
(整數 (int))`
) 字元。
FILTER_FLAG_ENCODE_LOW
(整數 (int))FILTER_FLAG_ENCODE_HIGH
(整數 (int))FILTER_FLAG_ENCODE_AMP
(整數 (int))&
。
FILTER_FLAG_NO_ENCODE_QUOTES
(整數 (int))'
和 "
)不會被編碼。
FILTER_FLAG_EMPTY_STRING_NULL
(整數 (int))null
FILTER_VALIDATE_BOOL
(整數 (int))true
。 針對 `"0"`、`"false"`、`"off"`、`"no"` 和 `""`,會回傳 false
。 非布林值的返回值取決於 FILTER_NULL_ON_FAILURE
。如果設定了此選項,則會回傳 null
,否則會回傳 false
。default(預設值)
FILTER_VALIDATE_BOOLEAN
(int)FILTER_VALIDATE_BOOL
的別名。此別名在 PHP 8.0.0 引入其正式名稱之前即可使用。
FILTER_VALIDATE_INT
(int)注意:字串值會在驗證前使用 trim() 函式去除前後空白。
default(預設值)
min_range(最小範圍)
max_range(最大範圍)
FILTER_FLAG_ALLOW_OCTAL
(int)0[0-7]+
)。
FILTER_FLAG_ALLOW_HEX
(int)0x[0-9a-fA-F]+
)。
FILTER_VALIDATE_FLOAT
(int)注意:字串值會在驗證前使用 trim() 函式去除前後空白。
default(預設值)
decimal(小數)
min_range(最小範圍)
max_range(最大範圍)
FILTER_FLAG_ALLOW_THOUSAND
(int),
),通常代表千位分隔符號。
FILTER_VALIDATE_REGEXP
(int)regexp
選項提供的正規表達式驗證值。
default(預設值)
regexp(正規表達式)
FILTER_VALIDATE_URL
(int)default(預設值)
FILTER_FLAG_SCHEME_REQUIRED
(int)
自 PHP 7.3.0 起 _已棄用_,並自 PHP 8.0.0 起 _移除_。這是因為 FILTER_VALIDATE_URL
過濾器總是隱含此標記。
FILTER_FLAG_HOST_REQUIRED
(整數 (int))
自 PHP 7.3.0 起 _已棄用_,並自 PHP 8.0.0 起 _移除_。這是因為 FILTER_VALIDATE_URL
過濾器總是隱含此標記。
FILTER_FLAG_PATH_REQUIRED
(整數 (int))FILTER_FLAG_QUERY_REQUIRED
(整數 (int))有效的網址 (URL) 可能未指定 HTTP 協定 (http://
)。因此,可能需要進一步驗證以確定該網址是否使用預期的協定,例如 ssh://
或 mailto:
。
此過濾器僅適用於 ASCII 編碼的網址 (ASCII URL)。這表示國際化網域名稱 (IDN) 將一律被拒絕。
FILTER_VALIDATE_DOMAIN
(整數 (int))default(預設值)
FILTER_FLAG_HOSTNAME
(整數 (int))FILTER_VALIDATE_EMAIL
(整數 (int))addr-spec
語法執行的。但不支援註釋、空白摺疊和無點網域名稱,因此將會被拒絕。default(預設值)
FILTER_FLAG_EMAIL_UNICODE
(整數 (int))電子郵件驗證很複雜,確認電子郵件有效且存在的唯一真正方法是將電子郵件發送到該地址。
FILTER_VALIDATE_IP
(整數 (int))驗證值是否為 IP 位址。
default(預設值)
FILTER_FLAG_IPV4
(整數 (int))FILTER_FLAG_IPV6
(整數 (int))FILTER_FLAG_NO_RES_RANGE
(整數 (int))Reserved-By-Protocol
的範圍。對於 IPv4,對應於以下範圍:0.0.0.0/8
、169.254.0.0/16
、127.0.0.0/8
、240.0.0.0/4
。
對於 IPv6,對應於以下範圍:::1/128
、::/128
、::FFFF:0:0/96
、FE80::/10
。
FILTER_FLAG_NO_PRIV_RANGE
(整數)這些是 IPv4 位址,位於以下範圍內:10.0.0.0/8
、172.16.0.0/12
、192.168.0.0/16
。
FD
或 FC
開頭。
FILTER_FLAG_GLOBAL_RANGE
(整數)Global
屬性為 True
。從 PHP 8.2.0 開始可用。
FILTER_VALIDATE_MAC
(整數)default(預設值)
FILTER_UNSAFE_RAW
(整數)FILTER_FLAG_STRIP_*
和 FILTER_FLAG_ENCODE_*
過濾器清理旗標一起使用,它可以去除或編碼特殊字元。FILTER_DEFAULT
(整數)FILTER_UNSAFE_RAW
的別名。
FILTER_SANITIZE_STRING
(整數)FILTER_FLAG_STRIP_*
和 FILTER_FLAG_ENCODE_*
過濾器清理旗標一起使用,它也可以選擇性地去除或編碼指定的字元。 可以使用 FILTER_FLAG_NO_ENCODE_QUOTES
過濾器旗標來停用編碼引號的行為。從 PHP 8.1.0 開始 *已棄用*,請改用 htmlspecialchars()。
此過濾器去除標籤的方式與 strip_tags() 不同。
FILTER_SANITIZE_STRIPPED
(整數)FILTER_SANITIZE_STRING
的別名。
從 PHP 8.1.0 開始 *已棄用*,請改用 htmlspecialchars()。
FILTER_SANITIZE_ENCODED
(整數)FILTER_FLAG_STRIP_*
和 FILTER_FLAG_ENCODE_*
過濾器清理旗標一起使用,它也可以選擇性地去除或編碼指定的字元。FILTER_SANITIZE_SPECIAL_CHARS
(整數)此過濾器會將 '
、"
、<
、>
、&
以及 ASCII 值小於 32 的字元進行 HTML 編碼。
FILTER_FLAG_STRIP_*
過濾消毒旗標時,可以選擇性地移除指定的字元,並且可以使用 FILTER_FLAG_ENCODE_HIGH
對 ASCII 值大於 127 的字元進行編碼。
FILTER_SANITIZE_FULL_SPECIAL_CHARS
(整數)ENT_QUOTES
。 可以使用 FILTER_FLAG_NO_ENCODE_QUOTES
過濾旗標來停用編碼引號的行為。 如同 htmlspecialchars(),此過濾器會參照 default_charset INI 設定。如果偵測到一串位元組組成目前字元集中的無效字元,則會拒絕整個字串,並傳回空字串。
FILTER_SANITIZE_EMAIL
(整數)[a-zA-Z]
)、數字 ([0-9]
) 和特殊字元 !#$%&'*+-=?^_`{|}~@.[]
以外的所有字元來淨化字串。
FILTER_SANITIZE_URL
(整數)[a-zA-Z]
)、數字 ([0-9]
) 和特殊字元 $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=
以外的所有字元來淨化字串。
FILTER_SANITIZE_NUMBER_INT
(整數)[0-9]
)、加號 (+
) 和減號 (-
) 以外的所有字元來淨化字串。
FILTER_SANITIZE_NUMBER_FLOAT
(整數)[0-9]
)、加號 (+
) 和減號 (-
) 以外的所有字元來淨化字串。
FILTER_FLAG_ALLOW_FRACTION
(整數).
) 字元,通常代表整數和小數部分之間的分隔符號。
FILTER_FLAG_ALLOW_THOUSAND
(int),
) 字元,通常代表千分位分隔符號。
FILTER_FLAG_ALLOW_SCIENTIFIC
(整數)e
和 E
字元,以接受科學記數法表示的數字。
如果未使用 FILTER_FLAG_ALLOW_FRACTION
旗標,則會移除小數分隔符號,從而更改接收的值。
<?php
$number = '12.34';
var_dump(filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT));
var_dump(filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
?>
以上範例將輸出:
string(4) "1234" string(5) "12.34"
FILTER_SANITIZE_ADD_SLASHES
(整數)FILTER_SANITIZE_MAGIC_QUOTES
(整數)FILTER_SANITIZE_ADD_SLASHES
的別名。
從 PHP 7.3.0 開始 _棄用_ 並在 PHP 8.0.0 中 _移除_。
FILTER_CALLBACK
(整數)options
參數以與 'options'
鍵相關聯的值傳遞。
回呼函式應具有以下簽章:
值
注意: 回呼函式返回的值將是被調用過濾函式返回的值。
範例 #1 使用 FILTER_CALLBACK
驗證登入名稱的範例
<?php
function validate_login($value): ?string
{
if (strlen($value) >= 5 && ctype_alnum($value)) {
return $value;
}
return null;
}
$login = "val1dL0gin";
$filtered_login = filter_var($login, FILTER_CALLBACK, ['options' => 'validate_login']);
var_dump($filtered_login);
$login = "f&ke login";
$filtered_login = filter_var($login, FILTER_CALLBACK, ['options' => 'validate_login']);
var_dump($filtered_login);
?>
以上範例將輸出:
string(10) "val1dL0gin" NULL
此過濾器不能與任何其他過濾器旗標一起使用,例如 FILTER_NULL_ON_FAILURE
。
注意:FILTER_NULL_ON_FAILURE、FILTER_REQUIRE_SCALAR、FILTER_REQUIRE_ARRAY 和 FILTER_FORCE_ARRAY 沒有 "FILTER_FLAG_" 前綴,但它們是旗標!