Note: FILTER_NULL_ON_FAILURE, FILTER_REQUIRE_SCALAR, FILTER_REQUIRE_ARRAY and FILTER_FORCE_ARRAY dont have prefix "FILTER_FLAG_" but they are FLAGS!As constantes abaixo são definidas por esta extensão e só estarão disponíveis quando a extensão tiver sido compilada no PHP ou tiver sido carregada dinamicamente em tempo de execução.
Estas constantes são usadas por filter_input() e filter_input_array().
INPUT_POST
(int)
Variáveis POST.
INPUT_GET
(int)
Variáveis GET.
Variáveis COOKIE.
INPUT_ENV
(int)
Variáveis ENV.
INPUT_SERVER
(int)
Variáveis SERVER.
INPUT_SESSION
(int)
Variáveis SESSION. (Removida a partir do PHP 8.0.0; não estava implementada anteriormente)
INPUT_REQUEST
(int)
Variáveis REQUEST. (Removida a partir do PHP 8.0.0; não estava implementada anteriormente)
FILTER_FLAG_NONE
(int)
Sem flags.
FILTER_REQUIRE_SCALAR
(int)
Opção usada para requerer que a entrada do filtro seja um escalar.
FILTER_REQUIRE_ARRAY
(int)
Opção usada para requerer que a entrada do filtro seja um array.
FILTER_FORCE_ARRAY
(int)
Esta opção encapsula entradas encalares em um array de um elemento para filtros que operam em arrays.
FILTER_NULL_ON_FAILURE
(int)
Usa null ao invés de false em caso de falha.
Utilizável com qualquer filtro
FILTER_VALIDATE_*
de validação.
FILTER_THROW_ON_FAILURE
(int)
Lança uma Filter\FilterFailedException quando um
filtro de validação falhar, em vez de retornar false.
Pode ser usado com qualquer filtro
de validação
FILTER_VALIDATE_*.
Disponível a partir do PHP 8.5.0.
FILTER_FLAG_STRIP_LOW
(int)
Remove caracteres com valor ASCII menor que 32.
FILTER_FLAG_STRIP_HIGH
(int)
Remove caracteres com valor ASCII maior que 127.
FILTER_FLAG_STRIP_BACKTICK
(int)
Remove caracteres de acento grave (`).
FILTER_FLAG_ENCODE_LOW
(int)
Codifica caracteres com valor ASCII menor que 32.
FILTER_FLAG_ENCODE_HIGH
(int)
Codifica caracteres com valor ASCII maior que 127.
FILTER_FLAG_ENCODE_AMP
(int)
Codifica &.
FILTER_FLAG_NO_ENCODE_QUOTES
(int)
Não codifica aspas simples e duplas ('
e ").
FILTER_FLAG_EMPTY_STRING_NULL
(int)
Se a sanitização de uma string resultar em uma string vazia,
converte o valor para null.
FILTER_VALIDATE_BOOL
(int)
Retorna true para "1",
1 incluindo as notações binária, octal e hexadecimal, 1.0 incluindo notação científica,
"true", true,
"on"
e "yes".
Retorna false para "0",
0 incluindo as notações binária, octal e hexadecimal, 0.0 incluindo notação científica,
"false", false,
"off",
"no" e
"".
Valores string são comparados de forma insensível a maiúsculas/minúsculas.
O valor de retorno para valores não booleanos depende da opção
FILTER_NULL_ON_FAILURE.
Se estiver definida, retorna null, caso contrário, false.
defaultValor a retornar caso o filtro falhe.
Disponível a partir do PHP 8.0.0.
FILTER_VALIDATE_BOOLEAN
(int)
Sinônimo de FILTER_VALIDATE_BOOL.
O sinônimo estava disponível antes da introdução de seu nome canônico
no PHP 8.0.0.
FILTER_VALIDATE_INT
(int)
Valida se o valor é um inteiro, em caso de sucesso é convertido para o tipo int.
Nota:
Valores string são aparados usando trim() antes da validação.
defaultValor a retornar caso o filtro falhe.
min_rangeValor só é válido se for maior ou igual que o valor fornecido.
max_rangeValor só é válido se for menor ou igual que o valor fornecido.
FILTER_FLAG_ALLOW_OCTAL
(int)
Permite inteiros em notação octal
(0[0-7]+).
FILTER_FLAG_ALLOW_HEX
(int)
Permite inteiros em notação hexadecimal
(0x[0-9a-fA-F]+).
FILTER_VALIDATE_FLOAT
(int)
Valida se o valor é um float, em caso de sucesso é convertido para o tipo float.
Nota:
Valores string são aparados usando trim() antes da validação.
defaultValor a retornar caso o filtro falhe.
decimal
min_rangeValor só é válido se for maior ou igual que o valor fornecido. Disponível a partir do PHP 7.4.0.
max_rangeValor só é válido se for menor ou igual que o valor fornecido. Disponível a partir do PHP 7.4.0.
FILTER_FLAG_ALLOW_THOUSAND
(int)
Aceita vírgulas (,),
que normalmente representam separador de milhares em inglês.
FILTER_VALIDATE_REGEXP
(int)
Valida o valor comparando com a expressão regular informada pela opção
regexp.
defaultValor a retornar caso o filtro falhe.
regexpExpressão regular compatível com Perl.
FILTER_VALIDATE_URL
(int)
Verifica se o URL é válido conforme a » RFC 2396.
defaultValor a retornar caso o filtro falhe.
FILTER_FLAG_SCHEME_REQUIRED
(int)
Requer que o URL contenha uma parte de esquema.
DESCONTINUADA a partir do PHP 7.3.0 e
REMOVIDA a partir do PHP 8.0.0.
A razão é que fica sempre implícita pelo filtro
FILTER_VALIDATE_URL.
FILTER_FLAG_HOST_REQUIRED
(int)
Requer que o URL contenha uma parte de host.
DESCONTINUADA a partir do PHP 7.3.0 e
REMOVIDA a partir do PHP 8.0.0.
A razão é que fica sempre implícita pelo filtro
FILTER_VALIDATE_URL.
FILTER_FLAG_PATH_REQUIRED
(int)
Requer que o URL contenha uma parte de caminho.
FILTER_FLAG_QUERY_REQUIRED
(int)
Requer que o URL contenha uma parte de consulta.
Um URL válido pode não especificar o
protocolo HTTP (http://).
Portanto, uma validação adicional pode ser necessária para determinar se o
URL usa um protocolo esperado,
por exemplo, ssh:// ou mailto:.
Este filtro só funciona em URLs ASCII. Isto significa que os Nomes de Domínio Internacionalizados (IDN) serão sempre rejeitados.
FILTER_VALIDATE_DOMAIN
(int)
Valida se o nome de domínio é válido de acordo com » RFC 952, » RFC 1034, » RFC 1035, » RFC 1123, » RFC 2732, e » RFC 2181.
defaultValor a retornar caso o filtro falhe.
FILTER_FLAG_HOSTNAME
(int)
Requer que hostnames iniciem com caracteres alfanuméricos e contenham apenas caracteres alfanuméricos ou hífen.
FILTER_VALIDATE_EMAIL
(int)
Verifica se o valor é um endereço válido de e-mail.
A validação é realizada conforme a sintaxe addr-spec
na
» RFC 822.
Contudo, comentários, espaços em branco e domínios sem ponto
não são suportados, e por isso serão rejeitados.
defaultValor a retornar caso o filtro falhe.
FILTER_FLAG_EMAIL_UNICODE
(int)
Aceita caracteres Unicode na parte local. Disponível a partir do PHP 7.1.0.
A validação de e-mail é complexa e a única maneira verdadeira de confirmar se um e-mail é válido e existe é enviando um e-mail para o endereço.
FILTER_VALIDATE_IP
(int)
Valida o valor como um endereço IP.
defaultValor a retornar caso o filtro falhe.
FILTER_FLAG_IPV4
(int)
Permite endereço IPv4.
FILTER_FLAG_IPV6
(int)
Permite endereço IPv6.
FILTER_FLAG_NO_RES_RANGE
(int)
Nega endereços reservados.
Estes são os intervalos marcados como
Reserved-By-Protocol (reservados por protocolo) na
» RFC 6890.
Para IPv4, corresponden aos seguintes intervalos:
0.0.0.0/8, 169.254.0.0/16, 127.0.0.0/8, 240.0.0.0/4.
E para IPv6, corresponden aos seguintes intervalos:
::1/128, ::/128, ::FFFF:0:0/96, FE80::/10.
FILTER_FLAG_NO_PRIV_RANGE
(int)
Nega endereços privados.
São os endereços IPv4 que estão nestas faixas:
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.
E são os endereços IPv6 que inicial com
FD ou FC.
FILTER_FLAG_GLOBAL_RANGE
(int)
Permite apenas endereços globais.
Podem ser encontrados na
» RFC 6890
onde o atributo Global é True.
Disponível a partir do PHP 8.2.0.
FILTER_VALIDATE_MAC
(int)
Valida se o valor é um endereço MAC.
defaultValor a retornar caso o filtro falhe.
FILTER_UNSAFE_RAW
(int)
Este filtro não faz nada.
Entretanto, ele pode remover ou codificar caracteres especiais se usado em conjunto com
as opções FILTER_FLAG_STRIP_*
e FILTER_FLAG_ENCODE_*
de filtro de sanitização.
FILTER_DEFAULT
(int)
Sinônimo de FILTER_UNSAFE_RAW.
FILTER_SANITIZE_STRING
(int)
Este filtro remove etiquetas e codifica HTML com aspas duplas e simples.
Opcionalmente, ele pode remover ou codificar caracteres especificados se usado junto
com as opções de filtro de sanitização
FILTER_FLAG_STRIP_*
e FILTER_FLAG_ENCODE_*.
O comportamento da codificação de aspas pode ser desativado usando a
opção de filtro FILTER_FLAG_NO_ENCODE_QUOTES
Descontinuado a partir do PHP 8.1.0, use htmlspecialchars() em seu lugar.
A maneira como esse filtro remove as etiquetas não é equivalente a strip_tags().
FILTER_SANITIZE_STRIPPED
(int)
Sinônimo de FILTER_SANITIZE_STRING.
Descontinuado a partir do PHP 8.1.0, use htmlspecialchars() em seu lugar.
FILTER_SANITIZE_ENCODED
(int)
Este filtra codifica uma string em URL.
Opcionalmente pode codificar caracteres especificados se usado junto com
as opções de filtro de sanitização
FILTER_FLAG_STRIP_*
e FILTER_FLAG_ENCODE_*.
FILTER_SANITIZE_SPECIAL_CHARS
(int)
Este filtra codifica, em HTML,
', ", <, >, &
e caracteres com um valor ASCII menor que 32.
Diferentemente do filtro FILTER_SANITIZE_FULL_SPECIAL_CHARS, o filtro
FILTER_SANITIZE_SPECIAL_CHARS ignora a opção
FILTER_FLAG_NO_ENCODE_QUOTES.
Opcionalmente pode codificar caracteres especificados se usado junto com
as opções de filtro de sanitização FILTER_FLAG_STRIP_*,
e pode codificar caracteres com valores ASCII
maiores que 127 usando FILTER_FLAG_ENCODE_HIGH.
FILTER_SANITIZE_FULL_SPECIAL_CHARS
(int)
Este filtro é equivalente a chamar htmlspecialchars()
com ENT_QUOTES definida.
O comportamento da codificação de aspas pode ser desabilitado usando a
opção de filtro FILTER_FLAG_NO_ENCODE_QUOTES.
Assim como htmlspecialchars(), este filtro reconhece a configuração INI default_charset. Se for detectada uma sequência de bytes que constitui um caractere inválido no conjunto de caracteres atual, a string inteira será rejeitada, resultando no retorno de uma string vazia.
FILTER_SANITIZE_EMAIL
(int)
Sanitiza a string removendo todos os caracteres exceto
as letras latinas ([a-zA-Z]),
dígitos ([0-9])
e os caracteres especiais
!#$%&'*+-=?^_`{|}~@.[].
FILTER_SANITIZE_URL
(int)
Sanitiza a string removendo todos os caracteres exceto
as letras latinas ([a-zA-Z]),
dígitos ([0-9])
e os caracteres especiais
$-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=.
FILTER_SANITIZE_NUMBER_INT
(int)
Sanitiza a string removendo todos os caracteres exceto
([0-9]), sinal de adição (+),
e sinal de subtração (-).
FILTER_SANITIZE_NUMBER_FLOAT
(int)
Sanitiza a string removendo todos os caracteres exceto
([0-9]), sinal de adição (+),
e sinal de subtração (-).
FILTER_FLAG_ALLOW_FRACTION
(int)
Aceita o caractere ponto (.),
que normalmente representa o separador entre as partes inteira
e fracionária em inglês.
FILTER_FLAG_ALLOW_THOUSAND
(int)
Aceita vírgulas (,),
que normalmente representam separador de milhares em inglês.
FILTER_FLAG_ALLOW_SCIENTIFIC
(int)
Aceita números em notação científica permitindo os caracteres
e e E.
Se a opção FILTER_FLAG_ALLOW_FRACTION não for usada,
o separador de decimais será removido, alterando o valor recebido.
<?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));
?>O exemplo acima produzirá:
string(4) "1234" string(5) "12.34"
FILTER_SANITIZE_ADD_SLASHES
(int)
Aplica addslashes() à entrada. Disponível a partir do PHP 7.3.0.
FILTER_SANITIZE_MAGIC_QUOTES
(int)
Sinônimo de FILTER_SANITIZE_ADD_SLASHES.
DESCONTINUADA a partir do PHP 7.3.0 e REMOVIDA a partir do PHP 8.0.0.
FILTER_CALLBACK
(int)
Este filtro delega a filtragem a uma função definida pelo usuário.
O callable é passado através do
parâmetro options comom o valor associado à
chave 'options'.
A função deve ter a seguinte assinatura:
valueO valor a ser filtrado.
Nota:
O valor retornado pela função será o valor retornado pela função de filtro chamada.
Exemplo #1
Exemplo de uso de FILTER_CALLBACK para validar
um login
<?php
function validate_login(string $value): ?string
{
if (strlen($value) >= 5 && ctype_alnum($value)) {
return $value;
}
return null;
}
$login = "L0ginValido";
$filtered_login = filter_var($login, FILTER_CALLBACK, ['options' => 'validate_login']);
var_dump($filtered_login);
$login = "login f&lso";
$filtered_login = filter_var($login, FILTER_CALLBACK, ['options' => 'validate_login']);
var_dump($filtered_login);
?>O exemplo acima produzirá:
string(11) "L0ginValido" NULL
Este filtro não pode ser usado com nenhuma outra opção de filtro, como por exemplo,
FILTER_NULL_ON_FAILURE.
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
+ // 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" > & ©"