Resumo : neste tutorial você aprenderá como usar a filter_input()
função PHP para obter uma variável externa por nome e filtrá-la.
Introdução à função PHP filter_input()
A função PHP filter_input()
permite obter uma variável externa pelo seu nome e filtrá-la usando um ou mais filtros integrados.
O seguinte mostra a sintaxe da filter_input()
função:
filter_input ( int $type , string $var_name , int $filter = FILTER_DEFAULT , array|int $options = 0 ) : mixed
Linguagem de código: PHP ( php )
A filter_input()
função possui os seguintes parâmetros:
$type
é um deINPUT_GET
,INPUT_POST
,INPUT_COOKIE
,INPUT_SERVER
eINPUT_ENV
.$var_name
é o nome da variável a ser filtrada.$filter
é o ID do filtro a ser aplicado. Aqui está a lista de filtros válidos . Se você omitir o$filter
argumento, afilter_input()
função usará oFILTER_DEFAULT
id do filtro, que não filtra nada.$options
é uma matriz associativa que consiste em uma ou mais opções. Quando um filtro aceita as opções, você pode usar um ou mais sinalizadores. Se você quiser usar vários sinalizadores, será necessário separá-los por (|
), por exemplo,FILTER_SANITIZE_ENCODED | FILTER_SANITIZE_SPECIAL_CHARS
.
A filter_input()
função retorna null
, false
ou o valor filtrado de acordo com as seguintes regras:
- Se
$var_name
não estiver definido, afilte_input()
função retornaránull
. - Se o filtro falhar, a
filter_input()
função retornaráfalse
. - Caso contrário, retorna o valor filtrado da variável solicitada.
Exemplo de função PHP filter_input()
O exemplo a seguir usa a filter_input()
função para limpar dados de um formulário de pesquisa:
<?php
$term_html = filter_input(INPUT_GET, 'term', FILTER_SANITIZE_SPECIAL_CHARS);
$term_url = filter_input(INPUT_GET, 'term', FILTER_SANITIZE_ENCODED);
?>
<form action="search.php" method="get">
<label for="term"> Search </label>
<input type="search" name="term" id="term" value="<?php echo $term_html ?>">
<input type="submit" value="Search">
</form>
<?php
if (null !== $term_html) {
echo "The search result for <mark> $term_html </mark>.";
}
Linguagem de código: HTML, XML ( xml )
Como funciona o formulário.
O formulário contém uma entrada com tipo search
e um botão enviar.
Quando você insere um termo de pesquisa, por exemplo, how to use the filter_input function
e clica no botão enviar; o formulário usa o método GET para anexar a string de consulta do termo ao URL, por exemplo,
http://localhost/search.php?term=how+to+use+the+filter_input+function
Linguagem de código: texto simples ( texto simples )
Este formulário de pesquisa é enviado para si mesmo ( search.php
).
A filter_input()
função limpa o termo de pesquisa usando os filtros FILTER_SANITIZE_SPECIAL_CHARS
e FILTER_SANITIZE_ENCODED
.
O FILTER_SANITIZE_SPECIAL_CHARS
filtro retorna um valor para exibição no campo de pesquisa e o FILTER_SANITIZE_ENCODED
filtro retorna um valor para exibição na página.
filter_input vs. filter_var
Se uma variável não existir, a filter_input()
função retorna null
enquanto a filter_var()
função retorna uma string vazia e emite um aviso de um índice indefinido.
Suponha que você tenha uma página com o seguinte URL:
http://localhost/search.php
Linguagem de código: JavaScript ( javascript )
A filter_input()
função a seguir retorna null
e não gera nenhum erro quando você obtém a term
variável do INPUT_GET:
<?php
$term = filter_input(INPUT_GET, 'term', FILTER_SANITIZE_SPECIAL_CHARS);
var_dump($term);
Linguagem de código: HTML, XML ( xml )
Saída:
NULL
Linguagem de código: texto simples ( texto simples )
No entanto, a filter_var()
função retorna uma string vazia e emite um erro:
<?php
$term = filter_var($_GET['term'], FILTER_SANITIZE_SPECIAL_CHARS);
var_dump($term);
Linguagem de código: HTML, XML ( xml )
Saída:
Notice: Undefined index: term in ...\search.php on line 3
string(0) ""
Linguagem de código: texto simples ( texto simples )
Portanto, você costuma usar a função isset()
ou filter_has_var()
para verificar se uma variável está definida antes de passá-la para a filter_var()
função como esta:
<?php
if (isset($_GET['term'])) {
$term = filter_var($_GET['term'], FILTER_SANITIZE_SPECIAL_CHARS);
var_dump($term);
}
Linguagem de código: HTML, XML ( xml )
Além disso, a filter_input()
função não obtém os valores atuais das variáveis superglobais $_GET
, $_POST
,…. Em vez disso, utiliza os valores originais enviados na solicitação HTTP. Por exemplo:
<?php
$_GET['term'] = 'PHP'; // doesn't have any effect on INPUT_GET
$term = filter_input(INPUT_GET, 'term', FILTER_SANITIZE_SPECIAL_CHARS);
var_dump($term);
Linguagem de código: PHP ( php )
Saída:
NULL
Linguagem de código: texto simples ( texto simples )
Este exemplo tenta atribuir um valor à $_GET['term']
variável. No entanto, filter_input()
não lê o termo da $_GET
variável atual. Portanto, o script exibe NULL.
Por outro lado, a filter_var()
função lê valores da $_GET
variável atual. Por exemplo:
<?php
$_GET['term'] = 'PHP';
$term = filter_var($_GET['term'], FILTER_SANITIZE_SPECIAL_CHARS);
var_dump($term);
Linguagem de código: HTML, XML ( xml )
Saída:
string(3) "PHP"
Linguagem de código: JavaScript ( javascript )
Resumo
- Use a função PHP
filter_input()
para limpar e validar dados de variáveis externas.