Очищающие фильтры

Список очищающих фильтров
ID Имя Параметры Флаги Описание
FILTER_SANITIZE_EMAIL "email"     Удаляет все символы, кроме букв, цифр и !#$%&'*+-/=?^_`{|}~@.[].
FILTER_SANITIZE_ENCODED "encoded"   FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH Кодирует строку в формат URL, при необходимости удаляет или кодирует специальные символы.
FILTER_SANITIZE_MAGIC_QUOTES "magic_quotes"     Применяется функция addslashes().
FILTER_SANITIZE_NUMBER_FLOAT "number_float"   FILTER_FLAG_ALLOW_FRACTION, FILTER_FLAG_ALLOW_THOUSAND, FILTER_FLAG_ALLOW_SCIENTIFIC Удаляет все символы, кроме цифр, +- и, при необходимости, .,eE.
FILTER_SANITIZE_NUMBER_INT "number_int"     Удаляет все символы, кроме цифр и знаков плюса и минуса.
FILTER_SANITIZE_SPECIAL_CHARS "special_chars"   FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_HIGH Экранирует HTML-символы '"<>& и символы с ASCII-кодом, меньшим 32, при необходимости удаляет или кодирует остальные специальные символы.
FILTER_SANITIZE_FULL_SPECIAL_CHARS "full_special_chars"   FILTER_FLAG_NO_ENCODE_QUOTES, Эквивалентно вызову htmlspecialchars() с установленным параметром ENT_QUOTES. Кодирование кавычек может быть отключено с помощью установки флага FILTER_FLAG_NO_ENCODE_QUOTES. Аналогично htmlspecialchars(), этот фильтр принимает во внимание default_charset и, если будет обнаружена некорректная последовательность байт для данной кодировки, то вся строка будет признана негодной и и результатом будет строка нулевой длины. При использовании этого фильтра в качестве фильтра по умолчанию, ознакомьтесь с предупреждением ниже об установке флагов по умолчанию в 0.
FILTER_SANITIZE_STRING "string"   FILTER_FLAG_NO_ENCODE_QUOTES, FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP Удаляет тэги, при необходимости удаляет или кодирует специальные символы.
FILTER_SANITIZE_STRIPPED "stripped"     Псевдоним фильтра "string".
FILTER_SANITIZE_URL "url"     Удаляет все символы, кроме букв, цифр и $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=.
FILTER_UNSAFE_RAW "unsafe_raw"   FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP Бездействует, при необходимости удаляет или кодирует специальные символы. Этот фильтр также равнозначен константе FILTER_DEFAULT.

Внимание

При использовании одного из этих фильтров в качестве фильтра по умолчанию либо через ваш ini-файл, либо через конфигурацию веб-сервера, флаги по умолчанию установлены в значение FILTER_FLAG_NO_ENCODE_QUOTES. Вам необходимо явно придать параметру filter.default_flags значение 0 для наличия пустых кавычек по умолчанию. К примеру:

Пример #1 Настройка фильтра по умолчанию для работы аналогично функции htmlspecialchars

filter.default = full_special_chars
filter.default_flags = 0

Коментарии

It's not entirely clear what the LOW and HIGH ranges are. LOW is characters below 32, HIGH is those above 127, i.e. outside the ASCII range.

<?php
$a 
"\tcafé\n";
//This will remove the tab and the line break
echo filter_var($aFILTER_SANITIZE_STRINGFILTER_FLAG_STRIP_LOW);
//This will remove the é.
echo filter_var($aFILTER_SANITIZE_STRINGFILTER_FLAG_STRIP_HIGH);
?>
2009-11-27 03:07:04
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Автор:
Beware that FILTER_FLAG_STRIP_LOW strips NEWLINE and TAG and CARRIAGE RETURN chars. If you have a form that accepts user input in plaintext format, all the submitted text will lose all the line breaks, making it appear all on one line. This basically renders this filter useless for parsing user-submitted text, even in plain text.
2011-04-11 07:17:10
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
A good list of which ASCII characters are < 32 and > 127 can be found at: http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
2012-07-09 22:07:59
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Remember to trim() the $_POST before your filters are applied:

<?php

// We trim the $_POST data before any spaces get encoded to "%20"

// Trim array values using this function "trim_value"
function trim_value(&$value)
{
   
$value trim($value);    // this removes whitespace and related characters from the beginning and end of the string
}
array_filter($_POST'trim_value');    // the data in $_POST is trimmed

$postfilter =    // set up the filters to be used with the trimmed post array
   
array(
           
'user_tasks'                        =>    array('filter' => FILTER_SANITIZE_STRING'flags' => !FILTER_FLAG_STRIP_LOW),    // removes tags. formatting code is encoded -- add nl2br() when displaying
           
'username'                            =>    array('filter' => FILTER_SANITIZE_ENCODED'flags' => FILTER_FLAG_STRIP_LOW),    // we are using this in the url
           
'mod_title'                            =>    array('filter' => FILTER_SANITIZE_ENCODED'flags' => FILTER_FLAG_STRIP_LOW),    // we are using this in the url
       
);

$revised_post_array filter_var_array($_POST$postfilter);    // must be referenced via a variable which is now an array that takes the place of $_POST[]
echo (nl2br($revised_post_array['user_tasks']));    //-- use nl2br() upon output like so, for the ['user_tasks'] array value so that the newlines are formatted, since this is our HTML <textarea> field and we want to maintain newlines
?>
2012-09-19 20:39:00
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Автор:
Support for FILTER_SANITIZE_FULL_SPECIAL_CHARS was added from version 5.3.3
2013-02-15 21:42:42
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Just to clarify, since this may be unknown for a lot of people:

ASCII characters above 127 are known as "Extended" and they represent characters such as greek letters and accented letters in latin alphabets, used in languages such as pt_BR.

A good ASCII quick reference (aside from the already mentioned Wikipedia article) can be found at: http://www.asciicodes.com/
2013-03-02 08:04:16
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Here is a simpler and a better presented ASCII list for the <32 or 127> filters 
(if wikipedia confused the hell out of you):

http://www.danshort.com/ASCIImap/
2014-02-25 21:54:45
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Автор:
FILTER_SANITIZE_STRING doesn't behavior the same as strip_tags function.    strip_tags allows less than symbol inferred from context, FILTER_SANITIZE_STRING strips regardless.
<?php
$smaller 
"not a tag < 5";
echo 
strip_tags($smaller);    // -> not a tag < 5
echo filter_var $smallerFILTER_SANITIZE_STRING); // -> not a tag
?>
2015-10-22 18:56:04
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Автор:
To include multiple flags, simply separate the flags with vertical pipe symbols.

For example, if you want to use filter_var() to sanitize $string with FILTER_SANITIZE_STRING and pass in FILTER_FLAG_STRIP_HIGH and FILTER_FLAG_STRIP_LOW, just call it like this:

$string = filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW);

The same goes for passing a flags field in an options array in the case of using callbacks.

$var = filter_var($string, FILTER_SANITIZE_SPECIAL_CHARS,
array('flags' => FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_HIGH));

Thanks to the Brain Goo blog at popmartian.com/tipsntricks/for this info.
2016-03-10 12:11:59
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Автор:
Please be aware that when using filter_var() with FILTER_SANITIZE_NUMBER_FLOAT and FILTER_SANITIZE_NUMBER_INT the result will be a string, even if the input value is actually a float or an int.

Use FILTER_VALIDATE_FLOAT and FILTER_VALIDATE_INT, which will convert the result to the expected type.
2016-08-04 16:12:53
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
For those looking for a simple way around filtering POST forms that have textarea elements in them. If you also need tab for example you can extend quite easily.

<?php 
//create an array of all relevant textareas
$textareas = array("ta1");

foreach(
$_POST as $k => $v)
    {
       
$v trim($v);//so we are sure it is whitespace free at both ends
   
        //preserve newline for textarea answers
       
if(in_array($k,$textareas))$v=str_replace("\n","[NEWLINE]",$v); 
   
       
//sanitise string
       
$v filter_var($vFILTER_SANITIZE_STRINGFILTER_FLAG_STRIP_LOW FILTER_FLAG_STRIP_HIGH FILTER_FLAG_STRIP_BACKTICK);
   
       
//now replace the placeholder with the original newline
       
$_POST[$k] = str_replace("[NEWLINE]","\n",$v);
    }

//simple form for testing submital

?><!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Filter test</title>
</head>

<body>
   
<form action="" method="post">
    <p>
        <textarea name="ta1" cols="30" rows="10"><?php echo $_POST['ta1']; ?></textarea>
    </p>
    <p>
        <input type="text" name="txt1" size="30" value="<?php echo $_POST['txt1']; ?>" />
    </p>
    <p>
        <input type="submit" />   
    </p>
    </form>

</body>
   
</html>
2018-11-12 14:31:48
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Автор:
In the "FILTER_SANITIZE_URL" section where it says, "Remove all characters except letters, digits and $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=." is there a reason why there is a double backslash (\\)? Shouldn't there only be one backslash if it's saying that backslashes are allowed?
2020-01-31 02:55:51
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Автор:
To get ONLY numbers from a string use this code:
    echo preg_replace('/[^0-9]/', '', '123456-789');
2020-02-13 13:55:27
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Автор:
<?php
 
/*
     filter all ascii and save juste 0-9 a-Z and @ . _
*/

echo alphanum('abcdefghABCDEFGH0123456789/!:;@._');
// return abcdefghABCDEFGH0123456789@._

function alphanum$string $x=''){
       
$h=strlen($string);
        for(
$a=0$a<$h$a++) {
           
$i ord($string[$a]);
            if( 
                (
$i==46) || // .
               
($i==64) || // @
               
($i==95) || // _
               
($i 47 && $i 58) || //0123456789 
               
($i 64 && $i 91) || //ABCDEFGH..Z
               
($i 96 && $i 123)   //abcdefgh..z
             
) { $x .= $string[$a]; }   
        }
        return 
$x;
    }

?>
2020-07-20 20:29:22
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
Although it's specifically mentioned in the above documentation, because many seem to find this unintuitive it's worth pointing out that FILTER_SANITIZE_NUMBER_FLOAT will remove the decimal character unless you specify FILTER_FLAG_ALLOW_FRACTION:

<?php
$number_string 
'12.34';

echo 
filter_var$number_stringFILTER_SANITIZE_NUMBER_FLOAT ); // 1234

echo filter_var$number_stringFILTER_SANITIZE_NUMBER_FLOATFILTER_FLAG_ALLOW_FRACTION ); // 12.34
?>
2020-12-02 18:49:48
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
With the deprecation of FILTER_SANITIZE_STRING, the "use htmlspecialchars instead" is an incomplete comment.  The functionality of FILTER_SANITIZE_STRING was a combination of htmlspcialchars and (approximately) strip_tags.  For true compatibility a polyfil may be needed:

<?php
function filter_string_polyfill(string $string): string
{
   
$str preg_replace('/\x00|<[^>]*>?/'''$string);
    return 
str_replace(["'"'"'], ['&#39;''&#34;'], $str);
}

$string "Some \"' <bizzare> string & to Sanitize < !$@%";
echo 
filter_var($string,FILTER_SANITIZE_STRING).PHP_EOL;
//Some &#34;&#39;  string & to Sanitize 

echo htmlspecialchars($string).PHP_EOL;
//Some &quot;&#039; &lt;bizzare&gt; string &amp; to Sanitize &lt; !$@%

echo strip_tags($string).PHP_EOL;
//Some "'  string & to Sanitize < !$@%

echo htmlspecialchars(strip_tags($string,ENT_QUOTES)).PHP_EOL;
//Some &quot;&#039;  string &amp; to Sanitize &lt; !$@%

echo filter_string_polyfill($string).PHP_EOL;
//Some &#34;&#39;  string & to Sanitize
2023-12-11 23:05:23
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html
None of these parameters do answer my need, so I've made my own function, hope it helps some other folks!

function removeSpecialChars($valueToClean)
{
    return htmlspecialchars(str_replace([",", "#", "$", "%", "*", "~", "'", "=", "{", "[", "|", "`", "^", "]", "}", ":", ";", "<", ">", "/", "?", "&"], "", $valueToClean));
}
2024-05-10 20:23:17
http://php5.kiev.ua/manual/ru/filter.filters.sanitize.html

    Поддержать сайт на родительском проекте КГБ