Note: FILTER_NULL_ON_FAILURE, FILTER_REQUIRE_SCALAR, FILTER_REQUIRE_ARRAY and FILTER_FORCE_ARRAY dont have prefix "FILTER_FLAG_" but they are FLAGS!Претходно дефинирани константи
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Претходно дефинирани константи
Референца за `filter.constants.php` со подобрена типографија и навигација.
Претходно дефинирани константи
Следниве константи се дефинирани од ова проширување и ќе бидат достапни само кога проширувањето е или компајлирано во PHP или динамички вчитано во време на извршување.
-
Input Constants
-
INPUT_POST(int) - POST variables.
-
INPUT_GET(int) - GET variables.
- COOKIE variables.
-
INPUT_ENV(int) - ENV variables.
-
INPUT_SERVER(int) - SERVER variables.
-
INPUT_SESSION(int) - SESSION variables. (Removed as of PHP 8.0.0; was not implemented previously)
-
INPUT_REQUEST(int) - REQUEST variables. (Removed as of PHP 8.0.0; was not implemented previously)
These constants are used by filter_input() and filter_input_array().
-
Generic Filter Flags
-
FILTER_FLAG_NONE(int) - Верзијата на V8 Javascript Engine.
-
FILTER_REQUIRE_SCALAR(int) - Flag used to require the input of the filter to be a scalar.
-
FILTER_REQUIRE_ARRAY(int) - Flag used to require the input of the filter to be an array.
-
FILTER_FORCE_ARRAY(int) - This flag wraps scalar inputs into a one element array for filters which operate on arrays.
-
FILTER_NULL_ON_FAILURE(int) -
од PHP 8.0.0. Силно се обесхрабрува потпирањето на оваа функција.
nullнаместоfalseпри неуспех. Usable with any validationFILTER_VALIDATE_*filter.
-
Sanitization Filter Flags
-
FILTER_FLAG_STRIP_LOW(int) - Strip characters with ASCII value less than 32.
-
FILTER_FLAG_STRIP_HIGH(int) - Strip characters with ASCII value greater than 127.
-
FILTER_FLAG_STRIP_BACKTICK(int) -
Strips backtick (
`) characters. -
FILTER_FLAG_ENCODE_LOW(int) - Encode characters with ASCII value less than 32.
-
FILTER_FLAG_ENCODE_HIGH(int) - Encode characters with ASCII value greater than 127.
-
FILTER_FLAG_ENCODE_AMP(int) -
Encode
&. -
FILTER_FLAG_NO_ENCODE_QUOTES(int) -
Singe and double quotes (
'and") will not be encoded. -
FILTER_FLAG_EMPTY_STRING_NULL(int) -
If sanitizing a string results in an empty string, convert the value to
null
-
Филтри за валидација
-
FILTER_VALIDATE_BOOL(int) -
Патеката до PHP скриптата што треба да се провери.
truefor"1",1вклучувајќи бинарни, октални и хексадецимални нотации,1.0,"true",true,"on"Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во"yes". Патеката до PHP скриптата што треба да се провери.falsefor"0",0вклучувајќи бинарни, октални и хексадецимални нотации,0.0,"false",false,"off","no"Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во"". Вредностите на низата се споредуваат без разлика на големината на буквите. Вратената вредност за не-булови вредности зависи одFILTER_NULL_ON_FAILURE. Ако е поставено,nullсе враќа, инакуfalseсе враќа.-
Достапни опции
default- Вредност што треба да се врати во случај филтерот да не успее.
-
FILTER_VALIDATE_BOOLEAN(int) -
Псевдоним на
FILTER_VALIDATE_BOOL. Псевдонимот беше достапен пред воведувањето на неговото канонско име во PHP 8.0.0. -
FILTER_VALIDATE_INT(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) -
Валидира дали вредноста е пловечка точка, при успех се претвора во тип float.
Забелешка: Вредностите на низата се скратуваат користејќи trim() пред валидација.
-
Достапни опции
default- Вредност што треба да се врати во случај филтерот да не успее.
decimalmin_range- Вредноста е валидна само ако е поголема или еднаква на дадената вредност. Достапно од PHP 7.4.0.
max_range- Вредноста е валидна само ако е помала или еднаква на дадената вредност. Достапно од PHP 7.4.0.
-
Опционални знаменца
-
FILTER_FLAG_ALLOW_THOUSAND(int) -
Прифати запирки (
,), кои обично го претставуваат разделувачот на илјадарки.
-
FILTER_VALIDATE_REGEXP(int) -
Го проверува вредноста според регуларниот израз даден од
regexpoption.-
Достапни опции
default- Вредност што треба да се врати во случај филтерот да не успее.
regexp- Perl-compatible регуларен израз.
-
FILTER_VALIDATE_URL(int) -
Проверува дали URL е валиден според
» RFC 2396.
-
Достапни опции
default- Вредност што треба да се врати во случај филтерот да не успее.
-
Опционални знаменца
-
FILTER_FLAG_SCHEME_REQUIRED(int) -
Бара URL да содржи дел од шемата.
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава
DEPRECATED како од PHP 7.3.0 и REMOVED како од PHP 8.0.0. Ова е затоа што секогаш се подразбира од
FILTER_VALIDATE_URLfilter. -
FILTER_FLAG_HOST_REQUIRED(int) -
Бара URL да содржи дел од домаќинот.
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава
DEPRECATED како од PHP 7.3.0 и REMOVED како од PHP 8.0.0. Ова е затоа што секогаш се подразбира од
FILTER_VALIDATE_URLfilter. -
FILTER_FLAG_PATH_REQUIRED(int) - Бара URL да содржи дел од патеката.
-
FILTER_FLAG_QUERY_REQUIRED(int) - Бара URL да содржи дел од прашањето.
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваВалиден URL не смее да го специфицира HTTP протоколот (
http://). Затоа, може да биде потребна понатамошна валидација за да се утврди дали URL користи очекуван протокол, на пр.ssh://ormailto:.Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваОвој филтер работи само на ASCII URLи. Ова значи дека интернационализираните имиња на домени (IDN) секогаш ќе бидат отфрлени.
-
FILTER_VALIDATE_DOMAIN(int) -
Проверува дали името на доменот е валидно според
» RFC 952,
» RFC 1034,
» RFC 1034,
» RFC 1035,
» RFC 1123Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во
» RFC 2732.
-
Достапни опции
default- Вредност што треба да се врати во случај филтерот да не успее.
-
Опционални знаменца
-
FILTER_FLAG_HOSTNAME(int) - » RFC 2181
-
FILTER_VALIDATE_EMAIL(int) -
Бара имињата на хостовите да започнуваат со алфанумерички знак и да содржат само алфанумерички знаци или цртички.
Ја проверува вредноста дали е „валидна“ адреса на е-пошта.
addr-specВалидацијата се врши според синтаксисните правила во» RFC 822-
Достапни опции
default- Вредност што треба да се врати во случај филтерот да не успее.
-
Опционални знаменца
-
FILTER_FLAG_EMAIL_UNICODE(int) - . Сепак, коментарите, преклопувањето на празни места и доменските имиња без точки не се поддржани и затоа ќе бидат отфрлени.
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваПрифаќа Unicode знаци во локалниот дел. Достапно од PHP 7.1.0.
-
FILTER_VALIDATE_IP(int) -
Валидацијата на е-пошта е сложена и единствениот вистински начин да се потврди дека е-поштата е валидна и постои е да се испрати е-пошта на адресата.
-
Достапни опции
default- Вредност што треба да се врати во случај филтерот да не успее.
-
Опционални знаменца
-
FILTER_FLAG_IPV4(int) - Ја проверува вредноста како IP адреса.
-
FILTER_FLAG_IPV6(int) - Дозволи IPv4 адреса.
-
FILTER_FLAG_NO_RES_RANGE(int) -
Дозволи IPv6 адреса.
Одбиј резервирани адреси.
Reserved-By-Protocolin Ова се опсезите што се означени како.» RFC 6890
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(int) -
Одбиј приватни адреси.
Ова се IPv4 адреси кои се во следните опсези:
Ова се IPv6 адреси кои започнуваат со10.0.0.0/8,172.16.0.0/12,192.168.0.0/16.FDorFC. -
FILTER_FLAG_GLOBAL_RANGE(int) -
Дозволи само глобални адреси. Тие можат да се најдат во
Ова се опсезите што се означени како
каде што
Globalатрибутот еTrue. Достапно од PHP 8.2.0.
-
FILTER_VALIDATE_MAC(int) -
Валидира дали вредноста е MAC адреса.
-
Достапни опции
default- Вредност што треба да се врати во случај филтерот да не успее.
-
Филтри за чистење
-
FILTER_UNSAFE_RAW(int) -
Овој филтер не прави ништо.
Сепак, може да отстрани или кодира специјални знаци ако се користи заедно со
FILTER_FLAG_STRIP_*andFILTER_FLAG_ENCODE_*знаменца за чистење на филтерот. -
FILTER_DEFAULT(int) -
Псевдоним на
FILTER_UNSAFE_RAW. -
FILTER_SANITIZE_STRING(int) -
Овој филтер ги отстранува ознаките и HTML ги кодира двојните и единечните наводници.
Опционално може да отстрани или кодира наведени знаци ако се користи заедно со
FILTER_FLAG_STRIP_*andFILTER_FLAG_ENCODE_*знаменца за чистење на филтерот. Однесувањето на кодирање на наводници може да се оневозможи со користење наFILTER_FLAG_NO_ENCODE_QUOTESзнаменце на филтерот.Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваЗастарено од PHP 8.1.0, користете htmlspecialchars() instead.
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваНачинот на кој овој филтер ги отстранува ознаките не е еквивалентен на strip_tags().
-
FILTER_SANITIZE_STRIPPED(int) -
Псевдоним на
FILTER_SANITIZE_STRING.Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваЗастарено од PHP 8.1.0, користете htmlspecialchars() instead.
-
FILTER_SANITIZE_ENCODED(int) -
Овој филтер URL-кодира стринг.
Опционално може да отстрани или кодира наведени знаци ако се користи заедно со
FILTER_FLAG_STRIP_*andFILTER_FLAG_ENCODE_*знаменца за чистење на филтерот. -
FILTER_SANITIZE_SPECIAL_CHARS(int) -
Овој филтер HTML-ги кодира
Опционално може да отстрани одредени знаци ако се користи заедно со',",<,>,&и знаци со ASCII вредност помала од 32. За разлика одFILTER_SANITIZE_FULL_SPECIAL_CHARSфилтерот,FILTER_SANITIZE_SPECIAL_CHARSфилтерот ги игнорираFILTER_FLAG_NO_ENCODE_QUOTESflag.FILTER_FLAG_STRIP_*знамиња за санирање на филтерот, и може да кодира знаци со ASCII вредност поголема од 127 користејќиFILTER_FLAG_ENCODE_HIGH. -
FILTER_SANITIZE_FULL_SPECIAL_CHARS(int) -
Овој филтер е еквивалентен на повикување htmlspecialchars()
with
ENT_QUOTESset. Однесувањето на кодирање на наводници може да се оневозможи со користење наFILTER_FLAG_NO_ENCODE_QUOTESзнаменце на филтерот.Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваgried на NOSPAM точка nsys точка by htmlspecialchars(), овој филтер е свесен за default_charset INI поставката. Ако се открие низа од бајти што сочинуваат невалиден знак во тековниот сет на знаци, тогаш целиот стринг се отфрла, што резултира со враќање на празен стринг.
-
FILTER_SANITIZE_EMAIL(int) -
Санирај го стринг со отстранување на сите знаци освен латински букви (
[a-zA-Z]), цифри ([0-9]), и специјалните знаци!#$%&'*+-=?^_`{|}~@.[]. -
FILTER_SANITIZE_URL(int) -
Санирај го стринг со отстранување на сите знаци освен латински букви (
[a-zA-Z]), цифри ([0-9]), и специјалните знаци$-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=. -
FILTER_SANITIZE_NUMBER_INT(int) -
Санирај го стринг со отстранување на сите знаци освен цифри (
[0-9]), знак плус (+), знак минус (-). -
FILTER_SANITIZE_NUMBER_FLOAT(int) -
Санирај го стринг со отстранување на сите знаци освен цифри (
[0-9]), знак плус (+), знак минус (-).-
Опционални знаменца
-
FILTER_FLAG_ALLOW_FRACTION(int) -
Прифати точка (
.) знак, кој обично го претставува разделувачот помеѓу целобројниот и децималниот дел. -
FILTER_FLAG_ALLOW_THOUSAND(int) -
Прифати запирки (
,) знак, кој обично го претставува разделувачот на илјадарки. -
FILTER_FLAG_ALLOW_SCIENTIFIC(int) -
Прифати броеви во научна нотација дозволувајќи го
eandEcharacters.
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваАко
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));
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
string(4) "1234" string(5) "12.34"
-
-
FILTER_SANITIZE_ADD_SLASHES(int) - Примени addslashes() на влезот. Достапно од PHP 7.3.0.
-
FILTER_SANITIZE_MAGIC_QUOTES(int) -
Псевдоним на
FILTER_SANITIZE_ADD_SLASHES.Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваDEPRECATED како од PHP 7.3.0 и REMOVED од PHP 8.0.0.
-
Кориснички дефиниран филтер
-
FILTER_CALLBACK(int) -
Овој филтер го пренесува филтрирањето на кориснички дефинирана функција. На callable се пренесува преку
optionsпараметарот како вредност поврзана со'options'key.Повикот треба да ја има следнава сигнатура:
value- Вредноста што се филтрира.
Забелешка: Вредноста вратена од повикот ќе биде вредноста вратена од повиканата филтер функција.
Пример #1 Пример за користење
FILTER_CALLBACKза валидација на корисничко име<?php
function validate_login(string $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);
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
string(10) "val1dL0gin" NULL
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваОвој филтер не може да се користи со други знаменца за филтрирање, на пр.
FILTER_NULL_ON_FAILURE.
Белешки од корисници 4 белешки
<?php
+ // Handle FILTER_FLAG_STRIP_BACKTICK
+ // Fixes bug PHP_VERSION < 5.5.24
+ if ($flags & FILTER_FLAG_STRIP_BACKTICK) {
+ $output = str_replace('`', '', $output);
+ }
?>
Revised version:
<?php
function filter_sanitize_string(mixed $value, int $flags = 0): string|false|null {
if ($flags & FILTER_FLAG_EMPTY_STRING_NULL && $value === "") {
return null;
}
if (!(is_scalar($value) || is_null($value))) {
return false;
}
// Strip HTML tags and remove NUL bytes
$value = (string)$value;
$value = strip_tags($value);
$value = str_replace("\0", "", $value);
// High/Low ASCII handling (Byte-by-byte to match legacy behavior)
$output = "";
for ($i = 0, $n = strlen($value); $i < $n; $i++) {
$char = $value[$i];
$ord = ord($char);
if ($ord < 32) {
if ($flags & FILTER_FLAG_STRIP_LOW) continue;
if ($flags & FILTER_FLAG_ENCODE_LOW) {
$output .= "&#$ord;"; // Legacy decimal encoding
continue;
}
}
if ($ord > 127) {
if ($flags & FILTER_FLAG_STRIP_HIGH) continue;
if ($flags & FILTER_FLAG_ENCODE_HIGH) {
$output .= "&#$ord;"; // This turns © into © (©)
continue;
}
}
$output .= $char;
}
// Strip backticks
// Fixes bug PHP_VERSION < 5.5.24
if ($flags & FILTER_FLAG_STRIP_BACKTICK) {
$output = str_replace('`', '', $output);
}
// Legacy ONLY encoded ampersands if FILTER_FLAG_ENCODE_AMP was set
if ($flags & FILTER_FLAG_ENCODE_AMP) {
$output = str_replace('&', '&', $output);
}
// Replicate legacy quote encoding exactly (' and ")
if (!($flags & FILTER_FLAG_NO_ENCODE_QUOTES)) {
$output = str_replace(["'", '"'], [''', '"'], $output);
}
return $output;
}We can add FILTER_FLAG_EMPTY_STRING_NULL:
<?php
- function filter_sanitize_string(mixed $value, int $flags = 0): string|false {
+ function filter_sanitize_string(mixed $value, int $flags = 0): string|false|null {
+ if ($flags & FILTER_FLAG_EMPTY_STRING_NULL && $value === "") {
+ return null;
+ }
?>
For FILTER_FLAG_STRIP_BACKTICK, there is a bug history
(https://bugs.php.net/bug.php?id=69202)
so I did not attempt to code compatility through version history.We're all looking for a polyfill to replace the FILTER_SANITIZE_STRING flag, deprecated as of PHP 8.1.0,
that behaves exactly the same for scalar and non-scalar values.
(Using htmlspecialchars() and strip_tags() are not returning exactly the same output.)
<?php
function filter_sanitize_string(mixed $value, int $flags = 0): string|false {
if (!(is_scalar($value) || is_null($value))) {
return false;
}
// Strip HTML tags and remove NUL bytes
$value = (string)$value;
$value = strip_tags($value);
$value = str_replace("\0", "", $value);
// High/Low ASCII handling (Byte-by-byte to match legacy behavior)
$output = "";
for ($i = 0, $n = strlen($value); $i < $n; $i++) {
$char = $value[$i];
$ord = ord($char);
if ($ord < 32) {
if ($flags & FILTER_FLAG_STRIP_LOW) continue;
if ($flags & FILTER_FLAG_ENCODE_LOW) {
$output .= "&#$ord;"; // Legacy decimal encoding
continue;
}
}
if ($ord > 127) {
if ($flags & FILTER_FLAG_STRIP_HIGH) continue;
if ($flags & FILTER_FLAG_ENCODE_HIGH) {
$output .= "&#$ord;"; // This turns © into © (©)
continue;
}
}
$output .= $char;
}
// Legacy ONLY encoded & if FILTER_FLAG_ENCODE_AMP was set.
if ($flags & FILTER_FLAG_ENCODE_AMP) {
$output = str_replace('&', '&', $output);
}
// Replicate legacy quote encoding exactly (' and ")
if (!($flags & FILTER_FLAG_NO_ENCODE_QUOTES)) {
$output = str_replace(["'", '"'], [''', '"'], $output);
}
return $output;
}
// Tests
$string = "It's a \"test\" \x02 <script> > & ©";
// Deprecated example:
$sanitized = filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_HIGH);
var_dump($sanitized);
// Polyfill example:
$sanitized = filter_sanitize_string($string, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_HIGH);
var_dump($sanitized);
// Polyfill in filter_var() callback:
$sanitized = filter_var($string, FILTER_CALLBACK, [
'options' => function($value) {
return filter_sanitize_string($value, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_HIGH);
}
]);
var_dump($sanitized);
?>
Output:
string(44) "It's a "test" > & ©"
string(44) "It's a "test" > & ©"
string(44) "It's a "test" > & ©"