Note: FILTER_NULL_ON_FAILURE, FILTER_REQUIRE_SCALAR, FILTER_REQUIRE_ARRAY and FILTER_FORCE_ARRAY dont have prefix "FILTER_FLAG_" but they are FLAGS!Estas constantes son definidas por esta extensión, y solo están disponibles si esta extensión ha sido compilada con PHP, o bien cargada en tiempo de ejecución.
Estas constantes son utilizadas por filter_input() y filter_input_array().
INPUT_POST
(int)
Variables POST.
INPUT_GET
(int)
Variables GET.
Variables COOKIE.
INPUT_ENV
(int)
Variables ENV.
INPUT_SERVER
(int)
Variables SERVER.
INPUT_SESSION
(int)
Variables SESSION. (Eliminado a partir de PHP 8.0.0; no estaba implementado previamente)
INPUT_REQUEST
(int)
Variables REQUEST. (Eliminado a partir de PHP 8.0.0; no estaba implementado previamente)
FILTER_FLAG_NONE
(int)
Sin flags.
FILTER_REQUIRE_SCALAR
(int)
Flag utilizado para requerir que la entrada del filtro sea un escalar.
FILTER_REQUIRE_ARRAY
(int)
Flag utilizado para requerir que la entrada del filtro sea un array.
FILTER_FORCE_ARRAY
(int)
Este flag envuelve las entradas escalares en un array de un elemento para filtros que operan sobre arrays.
FILTER_NULL_ON_FAILURE
(int)
Usar null en lugar de false en caso de fallo.
Utilizable con cualquier filtro de validación
FILTER_VALIDATE_*.
FILTER_THROW_ON_FAILURE
(int)
Lanza una Filter\FilterFailedException cuando un
filtro de validación falla, en lugar de devolver false.
Utilizable con cualquier filtro de validación
FILTER_VALIDATE_*.
Disponible a partir de PHP 8.5.0.
FILTER_FLAG_STRIP_LOW
(int)
Elimina caracteres con valor ASCII menor que 32.
FILTER_FLAG_STRIP_HIGH
(int)
Elimina caracteres con valor ASCII mayor que 127.
FILTER_FLAG_STRIP_BACKTICK
(int)
Elimina caracteres de comilla invertida (`).
FILTER_FLAG_ENCODE_LOW
(int)
Codifica caracteres con valor ASCII menor que 32.
FILTER_FLAG_ENCODE_HIGH
(int)
Codifica caracteres con valor ASCII mayor que 127.
FILTER_FLAG_ENCODE_AMP
(int)
Codifica &.
FILTER_FLAG_NO_ENCODE_QUOTES
(int)
Las comillas simples y dobles (' y ")
no serán codificadas.
FILTER_FLAG_EMPTY_STRING_NULL
(int)
Si el saneamiento de un string resulta en un string vacío,
convierte el valor a null
FILTER_VALIDATE_BOOL
(int)
Devuelve true para "1",
1 incluyendo notaciones binarias, octales y hexadecimales, 1.0 incluyendo notación científica,
"true", true,
"on",
y "yes".
Devuelve false para "0",
0 incluyendo notaciones binarias, octales y hexadecimales, 0.0 incluyendo notación científica,
"false", false,
"off",
"no", y
"".
Los valores de string se comparan sin distinguir entre mayúsculas y minúsculas.
El valor de retorno para valores no booleanos depende de
FILTER_NULL_ON_FAILURE.
Si está configurado, se devuelve null, de lo contrario se devuelve false.
defaultValor a devolver en caso de que el filtro falle.
Disponible a partir de PHP 8.0.0.
FILTER_VALIDATE_BOOLEAN
(int)
Alias de FILTER_VALIDATE_BOOL.
El alias estaba disponible antes de la introducción de su nombre canónico
en PHP 8.0.0.
FILTER_VALIDATE_INT
(int)
Valida si el valor es un entero, en caso de éxito se convierte al tipo int.
Nota:
Los valores string son recortados usando trim() antes de la validación.
defaultValor a devolver en caso de que el filtro falle.
min_rangeEl valor solo es válido si es mayor o igual que el valor proporcionado.
max_rangeEl valor solo es válido si es menor o igual que el valor proporcionado.
FILTER_FLAG_ALLOW_OCTAL
(int)
Permite enteros en notación octal
(0[0-7]+).
FILTER_FLAG_ALLOW_HEX
(int)
Permite enteros en notación hexadecimal
(0x[0-9a-fA-F]+).
FILTER_VALIDATE_FLOAT
(int)
Valida si el valor es un float, en caso de éxito se convierte al tipo float.
Nota:
Los valores string son recortados usando trim() antes de la validación.
defaultValor a devolver en caso de que el filtro falle.
decimal
min_rangeEl valor solo es válido si es mayor o igual que el valor proporcionado. Disponible a partir de PHP 7.4.0.
max_rangeEl valor solo es válido si es menor o igual que el valor proporcionado. Disponible a partir de PHP 7.4.0.
FILTER_FLAG_ALLOW_THOUSAND
(int)
Acepta comas (,),
que normalmente representan el separador de miles.
FILTER_VALIDATE_REGEXP
(int)
Valida el valor contra la expresión regular proporcionada por la
opción regexp.
defaultValor a devolver en caso de que el filtro falle.
regexpExpresión regular compatible con Perl.
FILTER_VALIDATE_URL
(int)
Valida si la URL es válido según » RFC 2396.
defaultValor a devolver en caso de que el filtro falle.
FILTER_FLAG_SCHEME_REQUIRED
(int)
Requiere que la URL contenga una parte de esquema.
OBSOLETO a partir de PHP 7.3.0 y
ELIMINADO a partir de PHP 8.0.0.
Esto se debe a que siempre está implícito por el
filtro FILTER_VALIDATE_URL.
FILTER_FLAG_HOST_REQUIRED
(int)
Requiere que la URL contenga una parte de host.
OBSOLETO a partir de PHP 7.3.0 y
ELIMINADO a partir de PHP 8.0.0.
Esto se debe a que siempre está implícito por el
filtro FILTER_VALIDATE_URL.
FILTER_FLAG_PATH_REQUIRED
(int)
Requiere que la URL contenga una parte de ruta.
FILTER_FLAG_QUERY_REQUIRED
(int)
Requiere que la URL contenga una parte de consulta.
Una URL válida puede no especificar el
protocolo HTTP (http://).
Por lo tanto, puede ser necesaria una validación adicional para determinar si la
URL usa un protocolo esperado,
por ejemplo, ssh:// o mailto:.
Este filtro solo funciona con URLs ASCII. Esto significa que los Nombres de Dominio Internacionalizados (IDN) siempre serán rechazados.
FILTER_VALIDATE_DOMAIN
(int)
Valida si el nombre de dominio es válido según » RFC 952, » RFC 1034, » RFC 1035, » RFC 1123, » RFC 2732, y » RFC 2181.
defaultValor a devolver en caso de que el filtro falle.
FILTER_FLAG_HOSTNAME
(int)
Requiere que los nombres de host comiencen con un carácter alfanumérico y contengan solo caracteres alfanuméricos o guiones.
FILTER_VALIDATE_EMAIL
(int)
Valida si el valor es una dirección de correo electrónico "válida".
La validación se realiza contra la sintaxis addr-spec
en
» RFC 822.
Sin embargo, los comentarios, el plegado de espacios en blanco y los nombres de dominio sin puntos
no están soportados, y por lo tanto serán rechazados.
defaultValor a devolver en caso de que el filtro falle.
FILTER_FLAG_EMAIL_UNICODE
(int)
Acepta caracteres Unicode en la parte local. Disponible a partir de PHP 7.1.0.
La validación de correo electrónico es compleja y la única forma verdadera de confirmar que un correo electrónico es válido y existe es enviar un correo electrónico a la dirección.
FILTER_VALIDATE_IP
(int)
Valida el valor como dirección IP.
defaultValor a devolver en caso de que el filtro falle.
FILTER_FLAG_IPV4
(int)
Permite direcciones IPv4.
FILTER_FLAG_IPV6
(int)
Permite direcciones IPv6.
FILTER_FLAG_NO_RES_RANGE
(int)
Deniega direcciones reservadas.
Estos son los rangos que están marcados como
Reserved-By-Protocol en
» RFC 6890.
Que para IPv4 corresponden a los siguientes rangos:
0.0.0.0/8, 169.254.0.0/16, 127.0.0.0/8, 240.0.0.0/4.
Y para IPv6 corresponden a los siguientes rangos:
::1/128, ::/128, ::FFFF:0:0/96, FE80::/10.
FILTER_FLAG_NO_PRIV_RANGE
(int)
Deniega direcciones privadas.
Estas son direcciones IPv4 que están en los siguientes rangos:
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.
Estas son direcciones IPv6 que comienzan con
FD o FC.
FILTER_FLAG_GLOBAL_RANGE
(int)
Solo permite direcciones globales.
Estas se pueden encontrar en
» RFC 6890
donde el atributo Global es True.
Disponible a partir de PHP 8.2.0.
FILTER_VALIDATE_MAC
(int)
Valida si el valor es una dirección MAC.
defaultValor a devolver en caso de que el filtro falle.
FILTER_UNSAFE_RAW
(int)
Este filtro no hace nada.
Sin embargo, puede eliminar o codificar caracteres especiales si se usa junto con
los flags de saneamiento de filtro FILTER_FLAG_STRIP_*
y FILTER_FLAG_ENCODE_*.
FILTER_DEFAULT
(int)
Alias de FILTER_UNSAFE_RAW.
FILTER_SANITIZE_STRING
(int)
Este filtro elimina etiquetas y codifica en HTML comillas dobles y simples.
Opcionalmente puede eliminar o codificar caracteres especificados si se usa junto con
los flags de saneamiento de filtro FILTER_FLAG_STRIP_*
y FILTER_FLAG_ENCODE_*.
El comportamiento de codificación de comillas puede desactivarse usando el
flag de filtro FILTER_FLAG_NO_ENCODE_QUOTES.
Obsoleto a partir de PHP 8.1.0, use htmlspecialchars() en su lugar.
La forma en que este filtro elimina etiquetas no es equivalente a strip_tags().
FILTER_SANITIZE_STRIPPED
(int)
Alias de FILTER_SANITIZE_STRING.
Obsoleto a partir de PHP 8.1.0, use htmlspecialchars() en su lugar.
FILTER_SANITIZE_ENCODED
(int)
Este filtro codifica una cadena en URL.
Opcionalmente puede eliminar o codificar caracteres especificados si se usa junto con
los flags de saneamiento de filtro FILTER_FLAG_STRIP_*
y FILTER_FLAG_ENCODE_*.
FILTER_SANITIZE_SPECIAL_CHARS
(int)
Este filtro codifica en HTML
', ", <, >, &
y caracteres con un valor ASCII menor que 32.
A diferencia del filtro FILTER_SANITIZE_FULL_SPECIAL_CHARS, el
filtro FILTER_SANITIZE_SPECIAL_CHARS ignora el
flag FILTER_FLAG_NO_ENCODE_QUOTES.
Opcionalmente puede eliminar caracteres especificados si se usa junto con
los flags de saneamiento de filtro FILTER_FLAG_STRIP_*,
y puede codificar caracteres con valor ASCII
mayor que 127 usando FILTER_FLAG_ENCODE_HIGH.
FILTER_SANITIZE_FULL_SPECIAL_CHARS
(int)
Este filtro es equivalente a llamar a htmlspecialchars()
con ENT_QUOTES configurado.
El comportamiento de codificación de comillas puede desactivarse usando el
flag de filtro FILTER_FLAG_NO_ENCODE_QUOTES.
Al igual que htmlspecialchars(), este filtro es consciente de la configuración INI default_charset. Si se detecta una secuencia de bytes que forma un carácter no válido en el juego de caracteres actual, entonces toda la cadena es rechazada resultando en que se devuelva una cadena vacía.
FILTER_SANITIZE_EMAIL
(int)
Sanea la cadena eliminando todos los caracteres excepto
letras latinas ([a-zA-Z]),
dígitos ([0-9]),
y los caracteres especiales
!#$%&'*+-=?^_`{|}~@.[].
FILTER_SANITIZE_URL
(int)
Sanea la cadena eliminando todos los caracteres excepto
letras latinas ([a-zA-Z]),
dígitos ([0-9]),
y los caracteres especiales
$-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=.
FILTER_SANITIZE_NUMBER_INT
(int)
Sanea la cadena eliminando todos los caracteres excepto dígitos
([0-9]), signo más (+),
y signo menos (-).
FILTER_SANITIZE_NUMBER_FLOAT
(int)
Sanea la cadena eliminando todos los caracteres excepto dígitos
([0-9]), signo más (+),
y signo menos (-).
FILTER_FLAG_ALLOW_FRACTION
(int)
Acepta el carácter punto (.),
que normalmente representa el separador entre las partes entera y
fraccionaria.
FILTER_FLAG_ALLOW_THOUSAND
(int)
Acepta el carácter coma (,),
que normalmente representa el separador de miles.
FILTER_FLAG_ALLOW_SCIENTIFIC
(int)
Acepta números en notación científica permitiendo los
caracteres e y E.
Si no se usa el flag FILTER_FLAG_ALLOW_FRACTION,
entonces el separador decimal es eliminado, alterando el valor recibido.
<?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));
?>El ejemplo anterior mostrará:
string(4) "1234" string(5) "12.34"
FILTER_SANITIZE_ADD_SLASHES
(int)
Aplica addslashes() a la entrada. Disponible a partir de PHP 7.3.0.
FILTER_SANITIZE_MAGIC_QUOTES
(int)
Alias de FILTER_SANITIZE_ADD_SLASHES.
OBSOLETO a partir de PHP 7.3.0 y ELIMINADO a partir de PHP 8.0.0.
FILTER_CALLBACK
(int)
Este filtro delega el filtrado a una función definida por el usuario.
El callable se pasa a través del
parámetro options como el valor asociado a
la clave 'options'.
La retrollamada debe tener la siguiente firma:
valueEl valor que está siendo filtrado.
Nota:
El valor devuelto por la retrollamada será el valor devuelto por la función de filtro invocada.
Ejemplo #1
Ejemplo de uso de FILTER_CALLBACK para validar
un nombre de inicio de sesión
<?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);
?>El ejemplo anterior mostrará:
string(10) "val1dL0gin" NULL
Nota:
A partir de PHP 8.1.25 y 8.2.12, los flags estructurales
FILTER_REQUIRE_ARRAY,FILTER_FORCE_ARRAYyFILTER_REQUIRE_SCALARse aplican a este filtro, yFILTER_NULL_ON_FAILUREcambia la forma en que se informa de tal fallo estructural. En versiones anteriores todos los flags eran ignorados. Los flags específicos del filtro siempre son ignorados y, dado que el valor devuelto por la retrollamada es el resultado, la retrollamada en sí misma no puede fallar: ningún flag convierte unfalsedevuelto por la retrollamada ennullo en una excepción.
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" > & ©"