- PHP filter_input
- Introduction to PHP filter_input() function
- PHP filter_input() function example
- filter_input vs. filter_var
- Summary
- Filter input for php
- Фильтрация данных с помощью zend-filter
- Контекстное экранирование с помощью zend-escaper
- Подключение Zend модулей к Expressive
- Совет: отправка информации в Google Analytics через API
- Подборка PHP песочниц
- Совет: активация отображения всех ошибок в PHP
- filter_input_array
- Список параметров
- Возвращаемые значения
- Примеры
- Примечания
- Смотрите также
- User Contributed Notes 8 notes
PHP filter_input
Summary: in this tutorial, you will learn how to use the PHP filter_input() function to get an external variable by name and filter it.
Introduction to PHP filter_input() function
The PHP filter_input() function allows you to get an external variable by its name and filter it using one or more built-in filters.
The following shows the syntax of the filter_input() function:
filter_input ( int $type , string $var_name , int $filter = FILTER_DEFAULT , array|int $options = 0 ) : mixed
Code language: PHP (php)
The filter_input() function has the following parameters:
- $type is one of INPUT_GET , INPUT_POST , INPUT_COOKIE , INPUT_SERVER , and INPUT_ENV .
- $var_name is the name of the variable to filter.
- $filter is the filter id to apply. Here’s the list of valid filters. If you omit the $filter argument, the filter_input() function will use the FILTER_DEFAULT filter id, which doesn’t filter anything.
- $options is an associative array that consists of one or more options. When a filter accepts the options, you can use one or more flags. If you want to use multiple flags, you need to separate them by the ( | ) e.g., FILTER_SANITIZE_ENCODED | FILTER_SANITIZE_SPECIAL_CHARS .
The filter_input() function returns null , false , or the filtered value according to the following rules:
- If the $var_name is not set, the filte_input() function returns null .
- If the filter fails, the filter_input() function returns false .
- Otherwise, it returns the filtered value of the requested variable.
PHP filter_input() function example
The following example uses the filter_input() function to sanitize data for a search form:
$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=""> input type="submit" value="Search"> form> if (null !== $term_html) < echo "The search result for $term_html ."; >Code language: HTML, XML (xml)
The form contains an input with type search and a submit button.
When you enter a search term, e.g., how to use the filter_input function and click the submit button; the form uses the GET method to append the term query string to the URL, e.g.,
http://localhost/search.php?term=how+to+use+the+filter_input+function
Code language: plaintext (plaintext)
This search form submits to itself ( search.php ).
The filter_input() function sanitizes the search term using the FILTER_SANITIZE_SPECIAL_CHARS and FILTER_SANITIZE_ENCODED filters.
The FILTER_SANITIZE_SPECIAL_CHARS filter returns a value for showing on the search field and the FILTER_SANITIZE_ENCODED filter returns a value for displaying on the page.
filter_input vs. filter_var
If a variable doesn’t exist, the filter_input() function returns null while the filter_var() function returns an empty string and issues a notice of an undefined index.
Suppose you have a page with the following URL:
http://localhost/search.php
Code language: JavaScript (javascript)
The following filter_input() function returns null and doesn’t raise any error when you get the term variable from the INPUT_GET:
$term = filter_input(INPUT_GET, 'term', FILTER_SANITIZE_SPECIAL_CHARS); var_dump($term);
Code language: HTML, XML (xml)
NULL
Code language: plaintext (plaintext)
However, the filter_var() function returns an empty string and issues an error:
$term = filter_var($_GET['term'], FILTER_SANITIZE_SPECIAL_CHARS); var_dump($term);
Code language: HTML, XML (xml)
Notice: Undefined index: term in . \search.php on line 3 string(0) ""
Code language: plaintext (plaintext)
Therefore, you often use the isset() or filter_has_var() function to check if a variable is set before passing it to the filter_var() function like this:
if (isset($_GET['term'])) < $term = filter_var($_GET['term'], FILTER_SANITIZE_SPECIAL_CHARS); var_dump($term); >
Code language: HTML, XML (xml)
Also, the filter_input() function doesn’t get the current values of the $_GET , $_POST , … superglobal variables. Instead, it uses the original values submitted in the HTTP request. For example:
$_GET['term'] = 'PHP'; // doesn't have any effect on INPUT_GET $term = filter_input(INPUT_GET, 'term', FILTER_SANITIZE_SPECIAL_CHARS); var_dump($term);
Code language: PHP (php)
NULL
Code language: plaintext (plaintext)
This example attempts to assign a value to the $_GET[‘term’] variable. However, the filter_input() doesn’t read the term from the current $_GET variable. Therefore, the script displays NULL.
On the other hand, the filter_var() function does read values from the current $_GET variable. For example:
$_GET['term'] = 'PHP'; $term = filter_var($_GET['term'], FILTER_SANITIZE_SPECIAL_CHARS); var_dump($term);
Code language: HTML, XML (xml)
string(3) "PHP"
Code language: JavaScript (javascript)
Summary
Filter input for php
В этом разделе помещены уроки по PHP скриптам, которые Вы сможете использовать на своих ресурсах.
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Совет: активация отображения всех ошибок в PHP
При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.
filter_input_array
Эта функция полезна для получения множества переменных без многократного вызова функции filter_input() .
Список параметров
Одна из констант INPUT_GET , INPUT_POST , INPUT_COOKIE , INPUT_SERVER или INPUT_ENV .
Массив, определяющий аргументы. Допустимый ключ — строка ( string ), содержащая имя переменной, а допустимое значение — либо тип фильтра, либо массив ( array ), при необходимости определяющий фильтр, флаги и параметры. Если значение является массивом, допустимыми ключами являются filter , который определяет (тип фильтра ), flags , который определяет любые флаги, применяемые к фильтру и options , который определяет любые параметры, применяемые к фильтру. Смотрите пример ниже для лучшего понимания.
Этот параметр также может быть целым числом, содержащим предопределённую фильтровую константу. Затем все значения во входном массиве фильтруются этим фильтром.
Добавляет в результат отсутствующие ключи со значением null .
Возвращаемые значения
Массив, содержащий значения запрошенных переменных в случае успешного выполнения. Если входной массив, определяемый параметром type , не заполнен, то функция вернёт null , если флаг FILTER_NULL_ON_FAILURE не задан, false в противном случае. Для других неудачных выполнений возвращается false
Значение массива будет false , если фильтрация завершилась неудачей, или null , если переменная не определена. Либо, если установлен флаг FILTER_NULL_ON_FAILURE , возвращается false , если переменная не определена и null , если фильтрация завершилась неудачей. Если параметр add_empty равен false , элемент массива не будет добавлен для удалённых переменных.
Примеры
Пример #1 Пример использования filter_input_array()
/* данные, полученные методом POST
$_POST = array(
‘product_id’ => ‘libgd’,
‘component’ => array(’10’),
‘version’ => ‘2.0.33’,
‘testarray’ => array(‘2′, ’23’, ’10’, ’12’),
‘testscalar’ => ‘2’,
);
*/
$args = array(
‘product_id’ => FILTER_SANITIZE_ENCODED ,
‘component’ => array( ‘filter’ => FILTER_VALIDATE_INT ,
‘flags’ => FILTER_REQUIRE_ARRAY ,
‘options’ => array( ‘min_range’ => 1 , ‘max_range’ => 10 )
),
‘version’ => FILTER_SANITIZE_ENCODED ,
‘doesnotexist’ => FILTER_VALIDATE_INT ,
‘testscalar’ => array(
‘filter’ => FILTER_VALIDATE_INT ,
‘flags’ => FILTER_REQUIRE_SCALAR ,
),
‘testarray’ => array(
‘filter’ => FILTER_VALIDATE_INT ,
‘flags’ => FILTER_REQUIRE_ARRAY ,
)
$myinputs = filter_input_array ( INPUT_POST , $args );
var_dump ( $myinputs );
echo «\n» ;
?>
Результат выполнения данного примера:
array(6) < ["product_id"]=>string(17) "libgd%3Cscript%3E" ["component"]=> array(1) < [0]=>int(10) > ["version"]=> string(6) "2.0.33" ["doesnotexist"]=> NULL ["testscalar"]=> int(2) ["testarray"]=> array(4) < [0]=>int(2) [1]=> int(23) [2]=> int(10) [3]=> int(12) > >
Примечания
Замечание:
В массиве INPUT_SERVER нет ключа REQUEST_TIME , потому что он будет позднее в $_SERVER .
Смотрите также
- filter_input() — Принимает переменную извне PHP и, при необходимости, фильтрует её
- filter_var_array() — Принимает несколько переменных и, при необходимости, фильтрует их
- Типы фильтров
User Contributed Notes 8 notes
Note that although you can provide a default filter for the entire input array there is no way to provide a flag for that filter without building the entire definition array yourself.
So here is a small function that can alleviate this hassle!
function filter_input_array_with_default_flags ( $type , $filter , $flags , $add_empty = true ) $loopThrough = array();
switch ( $type ) case INPUT_GET : $loopThrough = $_GET ; break;
case INPUT_POST : $loopThrough = $_POST ; break;
case INPUT_COOKIE : $loopThrough = $_COOKIE ; break;
case INPUT_SERVER : $loopThrough = $_SERVER ; break;
case INPUT_ENV : $loopThrough = $_ENV ; break;
>
$args = array();
foreach ( $loopThrough as $key => $value ) $args [ $key ] = array( ‘filter’ => $filter , ‘flags’ => $flags );
>
return filter_input_array ( $type , $args , $add_empty );
>
?>
Also, Some integer bitmasks and invalid UTF-8 sequence detection are available.
Code:
/**
* @param integer $type Constant like INPUT_XXX.
* @param array $default Default structure of the specified super global var.
* Following bitmasks are available:
* + FILTER_STRUCT_FORCE_ARRAY — Force 1 dimensional array.
* + FILTER_STRUCT_TRIM — Trim by ASCII control chars.
* + FILTER_STRUCT_FULL_TRIM — Trim by ASCII control chars,
* full-width and no-break space.
* @return array The value of the filtered super global var.
*/
define ( ‘FILTER_STRUCT_FORCE_ARRAY’ , 1 );
define ( ‘FILTER_STRUCT_TRIM’ , 2 );
define ( ‘FILTER_STRUCT_FULL_TRIM’ , 4 );
function filter_struct_utf8 ( $type , array $default ) static $func = __FUNCTION__ ;
static $trim = «[\\x0-\x20\x7f]» ;
static $ftrim = «[\\x0-\x20\x7f\xc2\xa0\xe3\x80\x80]» ;
static $recursive_static = false ;
if (! $recursive = $recursive_static ) $types = array(
INPUT_GET => $_GET ,
INPUT_POST => $_POST ,
INPUT_COOKIE => $_COOKIE ,
INPUT_REQUEST => $_REQUEST ,
);
if (!isset( $types [(int) $type ])) throw new LogicException ( ‘unknown super global var type’ );
>
$var = $types [(int) $type ];
$recursive_static = true ;
> else $var = $type ;
>
$ret = array();
foreach ( $default as $key => $value ) if ( $is_int = is_int ( $value )) if (!( $value | (
FILTER_STRUCT_FORCE_ARRAY |
FILTER_STRUCT_FULL_TRIM |
FILTER_STRUCT_TRIM
))) $recursive_static = false ;
throw new LogicException ( ‘unknown bitmask’ );
>
if ( $value & FILTER_STRUCT_FORCE_ARRAY ) $tmp = array();
if (isset( $var [ $key ])) foreach ((array) $var [ $key ] as $k => $v ) if (! preg_match ( ‘//u’ , $k )) continue;
>
$value &= FILTER_STRUCT_FULL_TRIM | FILTER_STRUCT_TRIM ;
$tmp += array( $k => $value ? $value : » );
>
>
$value = $tmp ;
>
>
if ( $isset = isset( $var [ $key ]) and is_array ( $value )) $ret [ $key ] = $func ( $var [ $key ], $value );
> elseif (! $isset || is_array ( $var [ $key ])) $ret [ $key ] = null ;
> elseif ( $is_int && $value & FILTER_STRUCT_FULL_TRIM ) $ret [ $key ] = preg_replace ( «/\A < $ftrim >++| < $ftrim >++\z/u» , » , $var [ $key ]);
> elseif ( $is_int && $value & FILTER_STRUCT_TRIM ) $ret [ $key ] = preg_replace ( «/\A < $trim >++| < $trim >++\z/u» , » , $var [ $key ]);
> else $ret [ $key ] = preg_replace ( ‘//u’ , » , $var [ $key ]);
>
if ( $ret [ $key ] === null ) $ret [ $key ] = $is_int ? » : $value ;
>
>
if (! $recursive ) $recursive_static = false ;
>
return $ret ;
>
?>