PHP 5.6.0beta1 released


(PHP 5 >= 5.2.0)

filter_inputNimmt Variable von Außen entgegen und filtert sie optional


mixed filter_input ( int $type , string $variable_name [, int $filter [, mixed $options ]] )



Einer von INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV, INPUT_SESSION (not implemented yet) and INPUT_REQUEST (not implemented yet).


Name der Variablen.


Anzuwendender Filter. Standard ist FILTER_DEFAULT.


Assoziatives Array mit Optionen oder bitweise Disjunktion von Flags. Wenn der Filter Optionen akzeptiert, können Flags auch im "flags" Feld des Arrays angegeben werden.


Bei Erfolg wird der Wert zurückgegeben, FALSE im Fehlerfall oder NULL, wenn die Variable variable_name nicht gesetzt ist. Wenn das Flag FILTER_NULL_ON_FAILURE benutzt wurde, wird FALSE zurückgegeben, wenn die Variable nicht gesetzt ist und NULL, wenn das Filtern fehlgeschlagen ist.


Beispiel #1 filter_input() Beispiel

$search_url filter_input(INPUT_GET'search'FILTER_SANITIZE_ENCODED);
"You have searched for $search_html.\n";
"<a href='?search=$search_url'>Search again.</a>";

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

You have searched for Me &#38; son.
<a href='?search=Me%20%26%20son'>Search again.</a>

Siehe auch

add a note add a note

User Contributed Notes 9 notes

ss23 at ss23 dot geek dot nz
3 years ago
Note that this function doesn't (or at least doesn't seem to) actually filter based on the current values of $_GET etc. Instead, it seems to filter based off the original values.
['search'] = 'foo'; // This has no effect on the filter_input

$search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
$search_url = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_ENCODED);
"You have searched for $search_html.\n";
"<a href='?search=$search_url'>Search again.</a>";

If you need to set a default input value and filter that, use filter_var on your required input variable instead
anthony dot parsons at manx dot net
6 years ago
FastCGI seems to cause strange side-effects with unexpected null values when using INPUT_SERVER and INPUT_ENV with this function. You can use this code to see if it affects your server:
foreach (
array_keys($_SERVER) as $b ) {
var_dump($b, filter_input(INPUT_SERVER, $b));
foreach (
array_keys($_ENV) as $b ) {
var_dump($b, filter_input(INPUT_ENV, $b));
If you want to be on the safe side, using the superglobal $_SERVER and $_ENV variables will always work. You can still use the filter_* functions for Get/Post/Cookie without a problem, which is the important part!
travismowens at gmail dot com
3 years ago
I wouldn't recommend people use this function to store their data in a database.  It's best not to encode data when storing it, it's better to store it raw and convert in upon the time of need.

One main reason for this is because if you have a short CHAR(16) field and the text contains encoded characters (quotes, ampersand) you can easily take a 12 character entry which obviously fits, but because of encoding it no longer fits.

Also, while not as common, if you need to use this data in another place, such as a non webpage (perhaps in a desktop app, or to a cell phone SMS or to a pager) the HTML encoded data will appear raw, and now you have to decode the data.

In summary, the best way to architect your system, is to store data as raw, and encode it only the moment you need to.  So this means in your PHP upon doing a SQL query, instead of merely doing an   echo $row['title']  you need to run htmlentities() on your echos, or better yet, an abstract function.
west {:a7} jsausa {:d0t}~ com
1 year ago
It's worth noting that the names for variables in filter input obey the same rules as variable naming in PHP (must start with an underscore or letter).  We were allowing users to build custom forms but hashing the names to prevent them from putting arbitrary content into the dom.  Turns out the hash function occasionally produced entirely numeric values for the field name... which doesn't work with filter_input but worked fine if you read directly from $_GET, $_POST, or $_REQUEST.  A workaround is to always prefix an underscore to the field name.
akshay dot leadindia at gmail dot com
7 months ago
The beauty of using this instead of directly using filter_var( $_GET['search'] ) is that you don't need to check if( isset( $_GET['search'] ) ) as if you pass that to filter_var and the key is not set then it will result in a warning. This function simplifies this and will return the relevant result to you (as per your options set) if the key has not been set in the user input.

If the type of filter you are using also supports a 'default' argument then this function will also stuff your missing input key with that value, again saving your efforts
Maksym Karazeev
5 years ago
Just a tip.

Note how to setup default filter for filter_var_array

When I tried to use filter_var_array and didn't mentioned all array indexes in definition it filtered it with some filter and broke values so using this tip corrected everything

= array_map(create_function('', 'return array("filter"=>FILTER_UNSAFE_RAW);'), $input);
chris at chlab dot ch
2 years ago
To use a class method for a callback function, as usual, provide an array with an instance of the class and the method name.

class myValidator
  public function
// return username or boolean false

$myValidator = new myValidator;
$options = array('options' => array($myValidator, 'username'));
$username = filter_input(INPUT_GET, 'username', FILTER_CALLBACK, $options);
Stefan Weinzierl
2 months ago
Here is an example how to work with the options-parameter. Notice the 'options' in the 'options'-Parameter!

=array('options'=>array('default'=>5, 'min_range'=>0, 'max_range'=>9));

$priority=filter_input(INPUT_GET, 'priority', FILTER_VALIDATE_INT, $options);

$priority will be 5 if the priority-Parameter isn't set or out the given range.
med dot k1987 at yahoo dot com
3 years ago
Does anybody know how to prevent FILTER_SANITIZE_SPECIAL_CHARS from converting the line breaks (\n) into (&#10;).
I'm developing a simple commenting system for my website and I found that the php filter converts \n to &#10; so when using nl2br() there are no line breaks.
help please.
thanks :)
To Top