PHP Conference Japan 2024

預定義常數

以下常數由此擴充功能定義,並且僅在擴充功能已編譯到 PHP 中或在執行階段動態載入時才可用。

輸入常數

這些常數由 filter_input()filter_input_array() 使用。

INPUT_POST (整數)
POST 變數。
INPUT_GET (整數)
GET 變數。
COOKIE 變數。
INPUT_ENV (整數)
ENV 變數。
INPUT_SERVER (整數 (int))
SERVER 變數。
INPUT_SESSION (整數 (int))
SESSION 變數。(自 PHP 8.0.0 起移除;先前未實作)
INPUT_REQUEST (整數 (int))
REQUEST 變數。(自 PHP 8.0.0 起移除;先前未實作)
通用過濾器旗標
FILTER_FLAG_NONE (整數 (int))
無旗標。
FILTER_REQUIRE_SCALAR (整數 (int))
用於要求過濾器的輸入為純量的旗標。
FILTER_REQUIRE_ARRAY (整數 (int))
用於要求過濾器的輸入為陣列 (array)的旗標。
FILTER_FORCE_ARRAY (整數 (int))
此旗標將純量輸入包裝成單元素陣列 (array),供操作陣列的過濾器使用。
FILTER_NULL_ON_FAILURE (整數 (int))
失敗時使用 null 而不是 false 可與任何驗證 FILTER_VALIDATE_* 過濾器一起使用。
淨化過濾器旗標
FILTER_FLAG_STRIP_LOW (整數 (int))
去除 ASCII 值小於 32 的字元。
FILTER_FLAG_STRIP_HIGH (整數 (int))
去除 ASCII 值大於 127 的字元。
FILTER_FLAG_STRIP_BACKTICK (整數 (int))
去除反引號 (`) 字元。
FILTER_FLAG_ENCODE_LOW (整數 (int))
編碼 ASCII 值小於 32 的字元。
FILTER_FLAG_ENCODE_HIGH (整數 (int))
編碼 ASCII 值大於 127 的字元。
FILTER_FLAG_ENCODE_AMP (整數 (int))
編碼 &
FILTER_FLAG_NO_ENCODE_QUOTES (整數 (int))
單引號和雙引號('")不會被編碼。
FILTER_FLAG_EMPTY_STRING_NULL (整數 (int))
如果淨化字串後結果為空字串,則將值轉換為 null
驗證過濾器
FILTER_VALIDATE_BOOL (整數 (int))
針對 `"1"`、`"true"`、`"on"` 和 `"yes"`,會回傳 true針對 `"0"`、`"false"`、`"off"`、`"no"` 和 `""`,會回傳 false 非布林值的返回值取決於 FILTER_NULL_ON_FAILURE。如果設定了此選項,則會回傳 null,否則會回傳 false
可用選項
default(預設值)
過濾失敗時要回傳的值。
自 PHP 8.0.0 起可用。
FILTER_VALIDATE_BOOLEAN (int)
FILTER_VALIDATE_BOOL 的別名。此別名在 PHP 8.0.0 引入其正式名稱之前即可使用。
FILTER_VALIDATE_INT (int)
驗證值是否為整數,驗證成功後會轉換為 int 類型。

注意字串值會在驗證前使用 trim() 函式去除前後空白。

可用選項
default(預設值)
過濾失敗時要回傳的值。
min_range(最小範圍)
僅當值大於或等於提供的數值時才視為有效。
max_range(最大範圍)
僅當值小於或等於提供的數值時才視為有效。
可選標記 (Optional Flags)
FILTER_FLAG_ALLOW_OCTAL (int)
允許八進位表示法的整數(0[0-7]+)。
FILTER_FLAG_ALLOW_HEX (int)
允許十六進位表示法的整數(0x[0-9a-fA-F]+)。
FILTER_VALIDATE_FLOAT (int)
驗證值是否為浮點數,驗證成功後會轉換為 float 類型。

注意字串值會在驗證前使用 trim() 函式去除前後空白。

可用選項
default(預設值)
過濾失敗時要回傳的值。
decimal(小數)
min_range(最小範圍)
僅當值大於或等於提供的數值時才視為有效。自 PHP 7.4.0 起可用。
max_range(最大範圍)
僅當值小於或等於提供的數值時才視為有效。自 PHP 7.4.0 起可用。
可選標記 (Optional Flags)
FILTER_FLAG_ALLOW_THOUSAND (int)
接受逗號(,),通常代表千位分隔符號。
FILTER_VALIDATE_REGEXP (int)
根據 regexp 選項提供的正規表達式驗證值。
可用選項
default(預設值)
過濾失敗時要回傳的值。
regexp(正規表達式)
Perl 相容 正規表達式。
FILTER_VALIDATE_URL (int)
根據 » RFC 2396 驗證網址名稱是否有效。
可用選項
default(預設值)
過濾失敗時要回傳的值。
可選標記 (Optional Flags)
FILTER_FLAG_SCHEME_REQUIRED (int)
要求網址必須包含通訊協定部分。
警告

自 PHP 7.3.0 起 _已棄用_,並自 PHP 8.0.0 起 _移除_。這是因為 FILTER_VALIDATE_URL 過濾器總是隱含此標記。

FILTER_FLAG_HOST_REQUIRED (整數 (int))
要求網址 (URL) 必須包含主機部分。
警告

自 PHP 7.3.0 起 _已棄用_,並自 PHP 8.0.0 起 _移除_。這是因為 FILTER_VALIDATE_URL 過濾器總是隱含此標記。

FILTER_FLAG_PATH_REQUIRED (整數 (int))
要求網址 (URL) 必須包含路徑部分。
FILTER_FLAG_QUERY_REQUIRED (整數 (int))
要求網址 (URL) 必須包含查詢字串部分。
警告

有效的網址 (URL) 可能未指定 HTTP 協定 (http://)。因此,可能需要進一步驗證以確定該網址是否使用預期的協定,例如 ssh://mailto:

警告

此過濾器僅適用於 ASCII 編碼的網址 (ASCII URL)。這表示國際化網域名稱 (IDN) 將一律被拒絕。

FILTER_VALIDATE_DOMAIN (整數 (int))
根據 » RFC 952» RFC 1034» RFC 1035» RFC 1123» RFC 2732» RFC 2181 驗證網域名稱是否有效。
可用選項
default(預設值)
過濾失敗時要回傳的值。
可選標記 (Optional Flags)
FILTER_FLAG_HOSTNAME (整數 (int))
要求主機名稱以英數字元開頭,並且僅包含英數字元或連字號。
FILTER_VALIDATE_EMAIL (整數 (int))
驗證該值是否為「有效」的電子郵件地址。 驗證是根據 » RFC 822 中的 addr-spec 語法執行的。但不支援註釋、空白摺疊和無點網域名稱,因此將會被拒絕。
可用選項
default(預設值)
過濾失敗時要回傳的值。
可選標記 (Optional Flags)
FILTER_FLAG_EMAIL_UNICODE (整數 (int))
接受本地部分中的 Unicode 字元。從 PHP 7.1.0 開始可用。
警告

電子郵件驗證很複雜,確認電子郵件有效且存在的唯一真正方法是將電子郵件發送到該地址。

FILTER_VALIDATE_IP (整數 (int))

驗證值是否為 IP 位址。

可用選項
default(預設值)
過濾失敗時要回傳的值。
可選標記 (Optional Flags)
FILTER_FLAG_IPV4 (整數 (int))
允許 IPv4 位址。
FILTER_FLAG_IPV6 (整數 (int))
允許 IPv6 位址。
FILTER_FLAG_NO_RES_RANGE (整數 (int))
拒絕保留地址。 這些是在 » RFC 6890 中標記為 Reserved-By-Protocol 的範圍。

對於 IPv4,對應於以下範圍:0.0.0.0/8169.254.0.0/16127.0.0.0/8240.0.0.0/4

對於 IPv6,對應於以下範圍:::1/128::/128::FFFF:0:0/96FE80::/10

FILTER_FLAG_NO_PRIV_RANGE (整數)
拒絕私有地址。

這些是 IPv4 位址,位於以下範圍內:10.0.0.0/8172.16.0.0/12192.168.0.0/16

這些是 IPv6 位址,以 FDFC 開頭。
FILTER_FLAG_GLOBAL_RANGE (整數)
僅允許全域位址。這些可以在 » RFC 6890 中找到,其中 Global 屬性為 True。從 PHP 8.2.0 開始可用。
FILTER_VALIDATE_MAC (整數)
驗證該值是否為 MAC 位址。
可用選項
default(預設值)
過濾失敗時要回傳的值。
過濾器清理
FILTER_UNSAFE_RAW (整數)
此過濾器不做任何處理。 但是,如果與 FILTER_FLAG_STRIP_*FILTER_FLAG_ENCODE_* 過濾器清理旗標一起使用,它可以去除或編碼特殊字元。
FILTER_DEFAULT (整數)
FILTER_UNSAFE_RAW 的別名。
FILTER_SANITIZE_STRING (整數)
此過濾器會去除標籤,並對雙引號和單引號進行 HTML 編碼。 如果與 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 (整數)
此過濾器會對字串進行 URL 編碼。 如果與 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 (整數)
此過濾器相當於呼叫 htmlspecialchars() 並設定 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])、加號 (+) 和減號 (-) 以外的所有字元來淨化字串。
可選標記 (Optional Flags)
FILTER_FLAG_ALLOW_FRACTION (整數)
允許點 (.) 字元,通常代表整數和小數部分之間的分隔符號。
FILTER_FLAG_ALLOW_THOUSAND (int)
允許逗號 (,) 字元,通常代表千分位分隔符號。
FILTER_FLAG_ALLOW_SCIENTIFIC (整數)
允許 eE 字元,以接受科學記數法表示的數字。
警告

如果未使用 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 (整數)
對輸入套用 addslashes()。從 PHP 7.3.0 開始提供。
FILTER_SANITIZE_MAGIC_QUOTES (整數)
FILTER_SANITIZE_ADD_SLASHES 的別名。
警告

從 PHP 7.3.0 開始 _棄用_ 並在 PHP 8.0.0 中 _移除_。

使用者自定義過濾器
FILTER_CALLBACK (整數)
此過濾器將過濾工作委託給使用者自定義的函式。可呼叫物件 (callable) 會透過 options 參數以與 'options' 鍵相關聯的值傳遞。

回呼函式應具有以下簽章:

callback(字串 $value): 混合
正在被過濾的值。

注意 回呼函式返回的值將是被調用過濾函式返回的值。

範例 #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

新增註釋

使用者貢獻的註釋 1 則註釋

6
shaman_master at list dot ru
4 年前
注意:FILTER_NULL_ON_FAILURE、FILTER_REQUIRE_SCALAR、FILTER_REQUIRE_ARRAY 和 FILTER_FORCE_ARRAY 沒有 "FILTER_FLAG_" 前綴,但它們是旗標!
To Top