A função filter_input() permite obter uma variável externa por seu nome e filtrá-la usando um ou mais filtros internos.
Podemos usar filter_input() para sanitizar nossas variáveis assim como fizemos no artigo anterior usando filter_var().
SINTAXE
filter_input(INPUT_GET, 'pesquisa', FILTER_SANITIZE_SPECIAL_CHARS);
Acima temos:
- INPUT_GET quer dizer que a variável ‘pesquisa‘ foi recebida pela url, ou seja, método GET. Além de INPUT_GET temos
INPUT_POST
,INPUT_COOKIE
,INPUT_SERVER
, eINPUT_ENV
. - pesquisa é uma variável recebida através da URL, ou seja, pelo método GET. Exemplo: http://localhost/meusite/index.php?pesquisa=comprar. Aqui, pesquisa recebe o valor comprar.
- FILTER_SANITIZE_SPECIAL_CHARS quer dizer que queremos sanitizar caracteres especiais(…SPECIAL_CHARS), tais com %, @, &…. Ao final desse artigo publico uma tabela com as principais flags de sanitização.
Exemplo de Uso da Função filter_input() em PHP
Abaixo temos a página index.php
<html>
<a href="index.php?email=maria_água@email">Receber Email</a>
<br>
<?php
$email_sem_sanitizar = $_GET['email'];
$email_sanitizado = filter_input(INPUT_GET, 'email',FILTER_SANITIZE_EMAIL);
echo "Não Sanitizado <mark> $email_sem_sanitizar </mark>";
echo "<br>";
echo "Sanitizado <mark> $email_sanitizado </mark>";
?>
</html>
EXPLICANDO PASSO A PASSO
O link abaixo envia para a própria página index.php a variável email que contém o valor maria_água@email
....
<a href="index.php?email=maria_água@email">Receber Email</a>
....
A linha a seguir sanitiza a variável email, tirando tudo aquilo que um endereço de email não pode conter, deixando somente letras, dígitos e !#$%&’*+-=?^_`{|}~@.[].
....
$email_sanitizado = filter_input(INPUT_GET, 'email',FILTER_SANITIZE_EMAIL);
....
As próximas linhas exibem o valor da variável email primeiramente sem sanitizar e em seguida sanitizada
....
echo "Não Sanitizado <mark> $email_sem_sanitizar </mark>";
echo "<br>";
echo "Sanitizado <mark> $email_sanitizado </mark>";
....
Resultado:
Receber Email
Não Sanitizado maria_água@email
Sanitizado maria_gua@email
Veja que o á de água foi removido, visto que endereço de amail não pode possuir acentuação.
Para mais filtros clique aqui.
Lista de Filtros
Além da flag FILTER_SANITIZE_EMAIL podemos usar tantas outras, como FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_SPECIAL_CHARS….
Abaixo segue links listando esses filtros.
Conclusão
Assim como filter_var(), filter_input() trabalha sanitizando variáveis.
Vimos no post anterior sobre a função filter_var() que tem funcionalidade similar à filter_input() mas com pequenas diferenças, tais como:
- Se uma variável não existir, a função filter_input() retorna null enquanto a função filter_var() retorna uma string vazia e emite uma notificação na tela. A notificação é do tipo: “Notice: Undefined index: term in …\search.php on line 3 string(0)“
- A função filter_input() não obtém os valores atuais de $_GET, $_POST, isto é, ela pega sempre a função passada pela URL. Se tentar alterar o valor colocando no meio do página de código um $_GET[‘email] = ‘outro@email’ não dará certo. filter_var() não tem essa restrição.
Comment on “PHP: Usando a Função filter_input()”