PHP 8.6.0 Beta 1 is available for testing

Предопределённые константы

Следующие константы определяются модулем и доступны, только если модуль либо собрали в PHP, либо динамически загрузили при выполнении кода.

Константы входных данных

Следующие константы указывают при вызове функций filter_input() и filter_input_array() .

INPUT_POST (int )
Переменные суперглобального массива POST.
INPUT_GET (int )
Переменные суперглобального массива GET.
Переменные суперглобального массива COOKIE.
INPUT_ENV (int )
Переменные суперглобального массива 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_THROW_ON_FAILURE (int )
Флаг устанавливает режим фильтрации, в котором вместо возврата значения false модуль выбрасывает исключение Filter\FilterFailedException , когда значение не проходит проверку. Флаг указывают при проверке значений фильтрами семейства FILTER_VALIDATE_* . Флаг доступен с PHP 8.5.0.
Флаги фильтров очистки
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 )
Фильтр возвращает true для следующих значений: "1"; 1, включая двоичную, восьмеричную и шестнадцатеричную нотации; 1.0, включая научную нотацию; "true" и true; "on" и "yes". Фильтр возвращает false для следующих значений: "0"; 0, включая двоичную, восьмеричную и шестнадцатеричную нотации; 0.0, включая научную нотацию; "false" и false; "off" и "no"; "". Строковые значения сравнивают без учёта регистра. С флагом FILTER_NULL_ON_FAILURE функция изменяет значение результата проверки нелогических значений. При установке флага вместо возврата значения false для нелогических значений функция возвращает значение null .
Доступные опции
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
Значение пройдёт проверку, только если оно меньше заданного значения или равно ему.
Дополнительные флаги
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.
Дополнительные флаги
FILTER_FLAG_ALLOW_THOUSAND (int )
Флаг разрешает фильтру пропускать значения с запятыми ,, которыми часто отбивают тысячи.
FILTER_VALIDATE_REGEXP (int )
Фильтр проверяет, соответствует ли значение регулярному выражению, которое указали в опции regexp.
Доступные опции
default
Значение, которое вернёт фильтр, если входные данные не пройдут проверку.
regexp
Perl-совместимые регулярные выражения.
FILTER_VALIDATE_URL (int )
Фильтр проверяет, соответствует ли URL-адрес стандарту » RFC 2396.
Доступные опции
default
Значение, которое вернёт фильтр, если входные данные не пройдут проверку.
Дополнительные флаги
FILTER_FLAG_SCHEME_REQUIRED (int )
Проверять, содержит ли URL-адрес схему ресурса.
Внимание

Флаг УСТАРЕЛ с 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-протокол, поэтому иногда требуется дополнительная проверка, которая определит, содержит ли URL-адрес конкретный протокол наподобие ssh:// или идентификатор схемы наподобие mailto:.

Внимание

Фильтр проверяет только URL-адреса, которые состоят из ASCII-символов, поэтому отклоняет международные доменные имена (англ. Internationalized Domain Names, IDN).

FILTER_VALIDATE_DOMAIN (int )
Фильтр проверяет, соответствует ли доменное имя стандартам » RFC 952, » RFC 1034, » RFC 1035, » RFC 1123, » RFC 2732 и » RFC 2181.
Доступные опции
default
Значение, которое вернёт фильтр, если входные данные не пройдут проверку.
Дополнительные флаги
FILTER_FLAG_HOSTNAME (int )
Проверять, начинается ли имя хоста с буквенно-цифрового символа и содержит только буквы, цифры или дефисы.
FILTER_VALIDATE_EMAIL (int )
Фильтр проверяет, «допустим» ли адрес эл. почты. Фильтр проверяет, соответствует ли почтовый адрес синтаксису спецификации addr-spec по стандарту » RFC 822. Фильтр не поддерживает комментарии, свёртывание пробельных символов и домены без точек, поэтому отклоняет такие адреса.
Доступные опции
default
Значение, которое вернёт фильтр, если входные данные не пройдут проверку.
Дополнительные флаги
FILTER_FLAG_EMAIL_UNICODE (int )
Флаг разрешает фильтру принимать символы Юникода в локальной части адреса, которая идёт перед символом @. Флаг доступен с PHP 7.1.0.
Внимание

Проверка адреса эл. почты сложна, и единственный надёжный способ подтвердить корректность и доступность адреса — отправить электронное письмо адресату.

FILTER_VALIDATE_IP (int )

Фильтр проверяет значение как IP-адрес.

Available options
default
Значение, которое вернёт фильтр, если входные данные не пройдут проверку.
Дополнительные флаги
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/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-адреса в следующих диапазонах: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.

К частным относятся IPv6-адреса, которые начинаются на FD или FC.
FILTER_FLAG_GLOBAL_RANGE (int )
Разрешает только глобальные адреса. Для глобальных адресов стандарт » RFC 6890 устанавливает в атрибуте Global значение True. Флаг доступен с PHP 8.2.0.
FILTER_VALIDATE_MAC (int )
Фильтр проверяет, соответствует ли значение MAC-адресу.
Доступные опции
default
Значение, которое вернёт фильтр, если входные данные не пройдут проверку.
Фильтры очистки
FILTER_UNSAFE_RAW (int )
Фильтр ничего не проверяет. При этом фильтр удалит или закодирует спецсимволы, если работает совместно с флагами очистки из семейства FILTER_FLAG_STRIP_* или FILTER_FLAG_ENCODE_* .
FILTER_DEFAULT (int )
Псевдоним фильтра FILTER_UNSAFE_RAW .
FILTER_SANITIZE_STRING (int )
Фильтр удаляет теги и кодирует двойные и одинарные кавычки в числовые HTML-сущности. Фильтр дополнительно удалит или закодирует символы, если работает совместно с флагами очистки из семейства FILTER_FLAG_STRIP_* или FILTER_FLAG_ENCODE_* . Флаг FILTER_FLAG_NO_ENCODE_QUOTES отключает кодирование кавычек.
Внимание

Фильтр устарел с PHP 8.1.0, вместо него спецсимволы преобразовывают функцией htmlspecialchars() .

Внимание

Фильтр и функция strip_tags() удаляют теги по-разному.

FILTER_SANITIZE_STRIPPED (int )
Псевдоним фильтра FILTER_SANITIZE_STRING .
Внимание

Фильтр устарел с PHP 8.1.0, вместо него спецсимволы преобразовывают функцией htmlspecialchars() .

FILTER_SANITIZE_ENCODED (int )
Фильтр кодирует строку для безопасного включения в состав URL-адреса. Фильтр дополнительно удалит или закодирует символы, если работает совместно с флагами очистки из семейства FILTER_FLAG_STRIP_* или FILTER_FLAG_ENCODE_* .
FILTER_SANITIZE_SPECIAL_CHARS (int )

Фильтр преобразовывает в числовые HTML-сущности символы ', ", <, >, & и символы с ASCII-кодами меньше 32. Фильтр FILTER_SANITIZE_SPECIAL_CHARS игнорирует флаг FILTER_FLAG_NO_ENCODE_QUOTES , в отличие от фильтра FILTER_SANITIZE_FULL_SPECIAL_CHARS .

Фильтр дополнительно удалит символы, если работает совместно с флагами очистки из семейства FILTER_FLAG_STRIP_* , и закодирует символы с ASCII-кодами больше 127 при установке флага FILTER_FLAG_ENCODE_HIGH .
FILTER_SANITIZE_FULL_SPECIAL_CHARS (int )
Поведение фильтра аналогично вызову функции htmlspecialchars() с флагом ENT_QUOTES . Флаг FILTER_FLAG_NO_ENCODE_QUOTES отключает кодирование кавычек.
Внимание

Аналогично функции htmlspecialchars() фильтр учитывает настройку INI-директивы default_charset. Входная строка отклоняется, и фильтр возвращает пустую строку, если последовательность байтов невозможно декодировать в допустимый символ в текущем наборе символов.

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 )
Пропускает числа в научной нотации с символами 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 (int )
Фильтр применяет функцию addslashes() ко входным данным. Фильтр доступен с PHP 7.3.0.
FILTER_SANITIZE_MAGIC_QUOTES (int )
Псевдоним фильтра FILTER_SANITIZE_ADD_SLASHES .
Внимание

Фильтр УСТАРЕЛ с PHP 7.3.0, а с PHP 8.0.0 фильтр УДАЛИЛИ.

Пользовательский фильтр
FILTER_CALLBACK (int )
Фильтр делегирует фильтрацию пользовательской функции. Выражение callable передаётся через параметр options как значение, связанное с ключом 'options'.

Сигнатура callback-функции:

function callback(string $value): mixed
value
Значение для фильтрации.

Замечание: Значение возврата callback-функции вернётся как значение возврата из функции фильтрации.

Пример #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);

Результат выполнения приведённого примера:

string(10) "val1dL0gin"
NULL
Внимание

Фильтр нельзя комбинировать с флагами, включая флаг FILTER_NULL_ON_FAILURE .

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 4 notes

up
13
shaman_master at list dot ru
6 years ago
Note: FILTER_NULL_ON_FAILURE, FILTER_REQUIRE_SCALAR, FILTER_REQUIRE_ARRAY and FILTER_FORCE_ARRAY dont have prefix "FILTER_FLAG_" but they are FLAGS!
up
1
steven at nevvix dot com
6 months ago
<?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 &#194;&#169; (©)
 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('&', '&amp;', $output);
 }
 // Replicate legacy quote encoding exactly (&#39; and &#34;)
 if (!($flags & FILTER_FLAG_NO_ENCODE_QUOTES)) {
 $output = str_replace(["'", '"'], ['&#39;', '&#34;'], $output);
 }
 return $output;
}
up
1
steven at nevvix dot com
6 months ago
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.
up
1
steven at nevvix dot com
6 months ago
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 &#194;&#169; (©)
 continue;
 }
 }
 $output .= $char;
 }
 // Legacy ONLY encoded & if FILTER_FLAG_ENCODE_AMP was set.
 if ($flags & FILTER_FLAG_ENCODE_AMP) {
 $output = str_replace('&', '&amp;', $output);
 }
 // Replicate legacy quote encoding exactly (&#39; and &#34;)
 if (!($flags & FILTER_FLAG_NO_ENCODE_QUOTES)) {
 $output = str_replace(["'", '"'], ['&#39;', '&#34;'], $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&#39;s a &#34;test&#34; > & &#194;&#169;"
string(44) "It&#39;s a &#34;test&#34; > & &#194;&#169;"
string(44) "It&#39;s a &#34;test&#34; > & &#194;&#169;"
+Добавить

AltStyle によって変換されたページ (->オリジナル) /