--TEST--
GET/POST/REQUEST Test with filtered data
--INI--
-filter.default=notags
+filter.default=special_chars
--POST--
d="quotes"&e=\slash
--GET--
--TEST--
GET/REQUEST Test with fifa example data
--INI--
-filter.default=notags
+filter.default=stripped
--POST--
--GET--
id=f03_photos&pgurl=http%3A//fifaworldcup.yahoo.com/03/en/photozone/index.html
--- /dev/null
+--TEST--
+input_has_variable()
+--GET--
+a=qwe&abc=<a>href</a>
+--POST--
+b=qwe&bbc=<a>href</a>
+--FILE--
+<?php
+
+var_dump(input_has_variable(INPUT_GET, "a"));
+var_dump(input_has_variable(INPUT_GET, "abc"));
+var_dump(input_has_variable(INPUT_GET, "nonex"));
+var_dump(input_has_variable(INPUT_GET, " "));
+var_dump(input_has_variable(INPUT_GET, ""));
+var_dump(input_has_variable(INPUT_GET, array()));
+
+var_dump(input_has_variable(INPUT_POST, "b"));
+var_dump(input_has_variable(INPUT_POST, "bbc"));
+var_dump(input_has_variable(INPUT_POST, "nonex"));
+var_dump(input_has_variable(INPUT_POST, " "));
+var_dump(input_has_variable(INPUT_POST, ""));
+var_dump(input_has_variable(INPUT_POST, array()));
+
+var_dump(input_has_variable(-1, ""));
+var_dump(input_has_variable("", ""));
+var_dump(input_has_variable(array(), array()));
+var_dump(input_has_variable(array(), ""));
+var_dump(input_has_variable("", array()));
+
+echo "Done\n";
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+PHP Warning: input_has_variable() expects parameter 2 to be string, array given in %s on line %d
+
+Warning: input_has_variable() expects parameter 2 to be string, array given in %s on line %d
+NULL
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+PHP Warning: input_has_variable() expects parameter 2 to be string, array given in %s on line %d
+
+Warning: input_has_variable() expects parameter 2 to be string, array given in %s on line %d
+NULL
+bool(false)
+PHP Warning: input_has_variable() expects parameter 1 to be long, string given in %s on line %d
+
+Warning: input_has_variable() expects parameter 1 to be long, string given in %s on line %d
+NULL
+PHP Warning: input_has_variable() expects parameter 1 to be long, array given in %s on line %d
+
+Warning: input_has_variable() expects parameter 1 to be long, array given in %s on line %d
+NULL
+PHP Warning: input_has_variable() expects parameter 1 to be long, array given in %s on line %d
+
+Warning: input_has_variable() expects parameter 1 to be long, array given in %s on line %d
+NULL
+PHP Warning: input_has_variable() expects parameter 1 to be long, string given in %s on line %d
+
+Warning: input_has_variable() expects parameter 1 to be long, string given in %s on line %d
+NULL
+Done
--- /dev/null
+--TEST--
+input_filters_list()
+--GET--
+
+--FILE--
+<?php
+
+var_dump(input_filters_list());
+var_dump(input_filters_list(array()));
+
+echo "Done\n";
+?>
+--EXPECTF--
+array(18) {
+ [0]=>
+ string(3) "int"
+ [1]=>
+ string(7) "boolean"
+ [2]=>
+ string(5) "float"
+ [3]=>
+ string(15) "validate_regexp"
+ [4]=>
+ string(12) "validate_url"
+ [5]=>
+ string(14) "validate_email"
+ [6]=>
+ string(11) "validate_ip"
+ [7]=>
+ string(6) "string"
+ [8]=>
+ string(8) "stripped"
+ [9]=>
+ string(7) "encoded"
+ [10]=>
+ string(13) "special_chars"
+ [11]=>
+ string(10) "unsafe_raw"
+ [12]=>
+ string(5) "email"
+ [13]=>
+ string(3) "url"
+ [14]=>
+ string(10) "number_int"
+ [15]=>
+ string(12) "number_float"
+ [16]=>
+ string(12) "magic_quotes"
+ [17]=>
+ string(8) "callback"
+}
+array(18) {
+ [0]=>
+ string(3) "int"
+ [1]=>
+ string(7) "boolean"
+ [2]=>
+ string(5) "float"
+ [3]=>
+ string(15) "validate_regexp"
+ [4]=>
+ string(12) "validate_url"
+ [5]=>
+ string(14) "validate_email"
+ [6]=>
+ string(11) "validate_ip"
+ [7]=>
+ string(6) "string"
+ [8]=>
+ string(8) "stripped"
+ [9]=>
+ string(7) "encoded"
+ [10]=>
+ string(13) "special_chars"
+ [11]=>
+ string(10) "unsafe_raw"
+ [12]=>
+ string(5) "email"
+ [13]=>
+ string(3) "url"
+ [14]=>
+ string(10) "number_int"
+ [15]=>
+ string(12) "number_float"
+ [16]=>
+ string(12) "magic_quotes"
+ [17]=>
+ string(8) "callback"
+}
+Done
--- /dev/null
+--TEST--
+input_name_to_filter()
+--GET--
+
+--FILE--
+<?php
+
+var_dump(input_name_to_filter("stripped"));
+var_dump(input_name_to_filter("string"));
+var_dump(input_name_to_filter("url"));
+var_dump(input_name_to_filter("int"));
+var_dump(input_name_to_filter("none"));
+var_dump(input_name_to_filter(array()));
+var_dump(input_name_to_filter(-1));
+var_dump(input_name_to_filter(0,0,0));
+
+echo "Done\n";
+?>
+--EXPECTF--
+int(513)
+int(513)
+int(518)
+int(257)
+NULL
+PHP Warning: input_name_to_filter() expects parameter 1 to be string, array given in %s on line %d
+
+Warning: input_name_to_filter() expects parameter 1 to be string, array given in %s on line %d
+NULL
+NULL
+PHP Warning: input_name_to_filter() expects exactly 1 parameter, 3 given in %s on line %d
+
+Warning: input_name_to_filter() expects exactly 1 parameter, 3 given in %s on line %d
+NULL
+Done
--- /dev/null
+--TEST--
+filter_data()
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data(array(1,"1","", "-23234", "text", "asdf234asdfgs", array()), FL_INT));
+var_dump(filter_data(array(1.2,"1.7","", "-23234.123", "text", "asdf234.2asdfgs", array()), FL_FLOAT));
+var_dump(filter_data(1, array()));
+var_dump(filter_data(1, FS_STRING, 1));
+var_dump(filter_data(1, FS_STRING, 0));
+var_dump(filter_data(1, FS_STRING, array()));
+var_dump(filter_data(1, -1, array(123)));
+var_dump(filter_data(1, 0, array()));
+
+echo "Done\n";
+?>
+--EXPECTF--
+array(7) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(1)
+ [2]=>
+ int(0)
+ [3]=>
+ int(-23234)
+ [4]=>
+ NULL
+ [5]=>
+ NULL
+ [6]=>
+ array(0) {
+ }
+}
+array(7) {
+ [0]=>
+ float(1.2)
+ [1]=>
+ float(1.7)
+ [2]=>
+ float(0)
+ [3]=>
+ float(-23234.123)
+ [4]=>
+ NULL
+ [5]=>
+ NULL
+ [6]=>
+ array(0) {
+ }
+}
+PHP Warning: filter_data() expects parameter 2 to be long, array given in %s on line %d
+
+Warning: filter_data() expects parameter 2 to be long, array given in %s on line %d
+NULL
+string(1) "1"
+string(1) "1"
+string(1) "1"
+string(1) "1"
+string(1) "1"
+Done
--- /dev/null
+--TEST--
+input_get()
+--GET--
+a=<b>test</b>&b=http://example.com
+--POST--
+c=<p>string</p>&d=12345.7
+--FILE--
+<?php
+
+var_dump(input_get(INPUT_GET, "a", FS_STRIPPED));
+var_dump(input_get(INPUT_GET, "b", FS_URL));
+var_dump(input_get(INPUT_GET, "a", FS_SPECIAL_CHARS, array(1,2,3,4,5)));
+var_dump(input_get(INPUT_GET, "b", FL_FLOAT, new stdClass));
+var_dump(input_get(INPUT_POST, "c", FS_STRIPPED, array(5,6,7,8)));
+var_dump(input_get(INPUT_POST, "d", FL_FLOAT));
+var_dump(input_get(INPUT_POST, "c", FS_SPECIAL_CHARS));
+var_dump(input_get(INPUT_POST, "d", FL_INT));
+
+var_dump(input_get(new stdClass, "d"));
+
+var_dump(input_get(INPUT_POST, "c", "", ""));
+var_dump(input_get("", "", "", "", ""));
+var_dump(input_get(0, 0, 0, 0, 0));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(4) "test"
+string(18) "http://example.com"
+string(27) "<b>test</b>"
+NULL
+string(6) "string"
+float(12345.7)
+string(29) "<p>string</p>"
+NULL
+PHP Warning: input_get() expects parameter 1 to be long, object given in %s on line %d
+
+Warning: input_get() expects parameter 1 to be long, object given in %s on line %d
+NULL
+PHP Warning: input_get() expects parameter 3 to be long, string given in %s on line %d
+
+Warning: input_get() expects parameter 3 to be long, string given in %s on line %d
+NULL
+PHP Warning: input_get() expects parameter 1 to be long, string given in %s on line %d
+
+Warning: input_get() expects parameter 1 to be long, string given in %s on line %d
+NULL
+bool(false)
+Done
--- /dev/null
+--TEST--
+input_get()
+--GET--
+
+--FILE--
+<?php
+
+var_dump(input_get(INPUT_GET, "test"));
+var_dump(input_get(INPUT_POST, "test"));
+var_dump(input_get(INPUT_COOKIE, ""));
+
+echo "Done\n";
+?>
+--EXPECT--
+bool(false)
+bool(false)
+bool(false)
+Done
--- /dev/null
+--TEST--
+filter_data() and flags
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("0xff", FL_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_data("07", FL_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL)));
+var_dump(filter_data("0xff0000", FL_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_data("0666", FL_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL)));
+
+var_dump(filter_data("6", FL_INT, array("min_range"=>1, "max_range"=>7)));
+var_dump(filter_data("6", FL_INT, array("min_range"=>0, "max_range"=>5)));
+var_dump(filter_data(-1, FL_INT, array("min_range"=>1, "max_range"=>7)));
+var_dump(filter_data(-1, FL_INT, array("min_range"=>-4, "max_range"=>7)));
+
+var_dump(filter_data("", FL_INT, array("min_range"=>-4, "max_range"=>7)));
+var_dump(filter_data("", FL_INT, array("min_range"=>2, "max_range"=>7)));
+var_dump(filter_data("", FL_INT, array("min_range"=>-5, "max_range"=>-3)));
+var_dump(filter_data(345, FL_INT, array("min_range"=>500, "max_range"=>100)));
+var_dump(filter_data("0ff", FL_INT));
+var_dump(filter_data("010", FL_INT));
+
+echo "Done\n";
+?>
+--EXPECT--
+int(255)
+int(7)
+int(16711680)
+int(438)
+int(6)
+NULL
+NULL
+int(-1)
+int(0)
+NULL
+NULL
+NULL
+NULL
+NULL
+Done
--- /dev/null
+--TEST--
+filter_data() and FL_BOOLEAN
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("no", FL_BOOLEAN));
+var_dump(filter_data(new stdClass, FL_BOOLEAN));
+var_dump(filter_data("yes", FL_BOOLEAN));
+var_dump(filter_data("true", FL_BOOLEAN));
+var_dump(filter_data("false", FL_BOOLEAN));
+var_dump(filter_data("off", FL_BOOLEAN));
+var_dump(filter_data("on", FL_BOOLEAN));
+var_dump(filter_data("0", FL_BOOLEAN));
+var_dump(filter_data("1", FL_BOOLEAN));
+var_dump(filter_data("NONE", FL_BOOLEAN));
+var_dump(filter_data("", FL_BOOLEAN));
+var_dump(filter_data(-1, FL_BOOLEAN));
+var_dump(filter_data("000000", FL_BOOLEAN));
+var_dump(filter_data("111111", FL_BOOLEAN));
+
+
+echo "Done\n";
+?>
+--EXPECTF--
+bool(false)
+PHP Notice: Object of class stdClass to string conversion in %s on line %d
+
+Notice: Object of class stdClass to string conversion in %s on line %d
+NULL
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(true)
+bool(false)
+bool(true)
+NULL
+bool(false)
+NULL
+NULL
+NULL
+Done
--- /dev/null
+--TEST--
+filter_data() and FL_URL
+--GET--
+
+--FILE--
+<?php
+
+$values = Array(
+'http://example.com/index.html',
+'http://www.example.com/index.php',
+'http://www.example/img/test.png',
+'http://www.example/img/dir/',
+'http://www.example/img/dir',
+'http//www.example/wrong/url/',
+'http:/www.example',
+'file:///tmp/test.c',
+'ftp://ftp.example.com/tmp/',
+'/tmp/test.c',
+'/',
+'http://',
+'http:/',
+'http:',
+'http',
+'',
+-1,
+array(),
+);
+foreach ($values as $value) {
+ var_dump(filter_data($value, FL_URL));
+}
+
+
+var_dump(filter_data("qwe", FL_URL, FILTER_FLAG_SCHEME_REQUIRED));
+var_dump(filter_data("http://qwe", FL_URL, FILTER_FLAG_SCHEME_REQUIRED));
+var_dump(filter_data("http://", FL_URL, FILTER_FLAG_HOST_REQUIRED));
+var_dump(filter_data("/tmp/test", FL_URL, FILTER_FLAG_HOST_REQUIRED));
+var_dump(filter_data("http://www.example.com", FL_URL, FILTER_FLAG_HOST_REQUIRED));
+var_dump(filter_data("http://www.example.com", FL_URL, FILTER_FLAG_PATH_REQUIRED));
+var_dump(filter_data("http://www.example.com/path/at/the/server/", FL_URL, FILTER_FLAG_PATH_REQUIRED));
+var_dump(filter_data("http://www.example.com/index.html", FL_URL, FILTER_FLAG_QUERY_REQUIRED));
+var_dump(filter_data("http://www.example.com/index.php?a=b&c=d", FL_URL, FILTER_FLAG_QUERY_REQUIRED));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(29) "http://example.com/index.html"
+string(32) "http://www.example.com/index.php"
+string(31) "http://www.example/img/test.png"
+string(27) "http://www.example/img/dir/"
+string(26) "http://www.example/img/dir"
+string(28) "http//www.example/wrong/url/"
+string(17) "http:/www.example"
+string(18) "file:///tmp/test.c"
+string(26) "ftp://ftp.example.com/tmp/"
+string(11) "/tmp/test.c"
+string(1) "/"
+NULL
+string(6) "http:/"
+string(5) "http:"
+string(4) "http"
+string(0) ""
+string(2) "-1"
+array(0) {
+}
+NULL
+string(10) "http://qwe"
+NULL
+NULL
+string(22) "http://www.example.com"
+NULL
+string(42) "http://www.example.com/path/at/the/server/"
+NULL
+string(40) "http://www.example.com/index.php?a=b&c=d"
+Done
--- /dev/null
+--TEST--
+filter_data() and FL_EMAIL
+--GET--
+
+--FILE--
+<?php
+$values = Array(
+'a@b.c',
+'abuse@example.com',
+'test!.!@#$%^&*@example.com',
+'test@@#$%^&*())).com',
+'test@.com',
+'test@com',
+'@',
+'[]()/@example.com',
+'QWERTYUIOPASDFGHJKLZXCVBNM@QWERTYUIOPASDFGHJKLZXCVBNM.NET',
+);
+foreach ($values as $value) {
+ var_dump(filter_data($value, FL_EMAIL));
+}
+
+echo "Done\n";
+?>
+--EXPECT--
+string(5) "a@b.c"
+string(17) "abuse@example.com"
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+string(57) "QWERTYUIOPASDFGHJKLZXCVBNM@QWERTYUIOPASDFGHJKLZXCVBNM.NET"
+Done
--- /dev/null
+--TEST--
+filter_data() and FL_REGEXP
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("data", FL_REGEXP, array("regexp"=>'/.*/')));
+var_dump(filter_data("data", FL_REGEXP, array("regexp"=>'/^b(.*)/')));
+var_dump(filter_data("data", FL_REGEXP, array("regexp"=>'/^d(.*)/')));
+var_dump(filter_data("data", FL_REGEXP, array("regexp"=>'blah')));
+var_dump(filter_data("data", FL_REGEXP, array("regexp"=>'[')));
+var_dump(filter_data("data", FL_REGEXP));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(4) "data"
+NULL
+string(4) "data"
+NULL
+NULL
+PHP Warning: filter_data(): 'regexp' option missing in %s on line %d
+
+Warning: filter_data(): 'regexp' option missing in %s on line %d
+NULL
+Done
--- /dev/null
+--TEST--
+filter_data() and FL_IP
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("192.168.0.1", FL_IP));
+var_dump(filter_data("192.168.0.1.1", FL_IP));
+var_dump(filter_data("::1", FL_IP));
+var_dump(filter_data("fe00::0", FL_IP));
+var_dump(filter_data("::123456", FL_IP));
+var_dump(filter_data("::1::b", FL_IP));
+var_dump(filter_data("127.0.0.1", FL_IP));
+var_dump(filter_data("192.168.0.1", FL_IP, FILTER_FLAG_NO_PRIV_RANGE));
+var_dump(filter_data("192.0.34.166", FL_IP, FILTER_FLAG_NO_PRIV_RANGE));
+var_dump(filter_data("127.0.0.1", FL_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_data("192.0.0.1", FL_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_data("192.0.34.166", FL_IP));
+var_dump(filter_data("256.1237.123.1", FL_IP));
+var_dump(filter_data("255.255.255.255", FL_IP));
+var_dump(filter_data("255.255.255.255", FL_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_data("", FL_IP));
+var_dump(filter_data(-1, FL_IP));
+
+
+var_dump(filter_data("::1", FL_IP, FILTER_FLAG_IPV4));
+var_dump(filter_data("127.0.0.1", FL_IP, FILTER_FLAG_IPV6));
+
+var_dump(filter_data("::1", FL_IP, FILTER_FLAG_IPV6));
+var_dump(filter_data("127.0.0.1", FL_IP, FILTER_FLAG_IPV4));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(11) "192.168.0.1"
+NULL
+string(3) "::1"
+string(7) "fe00::0"
+NULL
+NULL
+string(9) "127.0.0.1"
+NULL
+string(12) "192.0.34.166"
+string(9) "127.0.0.1"
+string(9) "192.0.0.1"
+string(12) "192.0.34.166"
+NULL
+string(15) "255.255.255.255"
+NULL
+NULL
+NULL
+NULL
+NULL
+string(3) "::1"
+string(9) "127.0.0.1"
+Done
--- /dev/null
+--TEST--
+filter_data() & FL_IP and weird data
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("....", FL_IP));
+var_dump(filter_data("...", FL_IP));
+var_dump(filter_data("..", FL_IP));
+var_dump(filter_data(".", FL_IP));
+var_dump(filter_data("1.1.1.1", FL_IP));
+
+echo "Done\n";
+?>
+--EXPECTF--
+NULL
+NULL
+NULL
+NULL
+string(7) "1.1.1.1"
+Done
--- /dev/null
+--TEST--
+filter_data() and FS_MAGIC_QUOTES
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("test'asd'asd'' asd\'\"asdfasdf", FS_MAGIC_QUOTES));
+var_dump(filter_data("'", FS_MAGIC_QUOTES));
+var_dump(filter_data("", FS_MAGIC_QUOTES));
+var_dump(filter_data(-1, FS_MAGIC_QUOTES));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(36) "test\'asd\'asd\'\' asd\\\'\"asdfasdf"
+string(2) "\'"
+string(0) ""
+string(2) "-1"
+Done
--- /dev/null
+--TEST--
+filter_data() and FS_NUMBER_*
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("qwertyu123456dfghj", FS_NUMBER_INT));
+var_dump(filter_data("asd123123.asd123.23", FS_NUMBER_INT));
+var_dump(filter_data("123,23", FS_NUMBER_INT));
+var_dump(filter_data("", FS_NUMBER_INT));
+var_dump(filter_data("0", FS_NUMBER_INT));
+var_dump(filter_data("asd123.2asd", FS_NUMBER_INT));
+var_dump(filter_data("qwertyuiop", FS_NUMBER_INT));
+var_dump(filter_data("123.4", FS_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+var_dump(filter_data("123,4", FS_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+var_dump(filter_data("123.4", FS_NUMBER_FLOAT, FILTER_FLAG_ALLOW_THOUSAND));
+var_dump(filter_data("123,4", FS_NUMBER_FLOAT, FILTER_FLAG_ALLOW_THOUSAND));
+var_dump(filter_data("123.4e", FS_NUMBER_FLOAT, FILTER_FLAG_ALLOW_SCIENTIFIC));
+var_dump(filter_data("123,4E", FS_NUMBER_FLOAT, FILTER_FLAG_ALLOW_SCIENTIFIC));
+var_dump(filter_data("qwe123,4qwe", FS_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+var_dump(filter_data("werty65456.34", FS_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+var_dump(filter_data("234.56fsfd", FS_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+var_dump(filter_data("", FS_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(6) "123456"
+string(11) "12312312323"
+string(5) "12323"
+string(0) ""
+string(1) "0"
+string(4) "1232"
+string(0) ""
+string(5) "123.4"
+string(4) "1234"
+string(4) "1234"
+string(5) "123,4"
+string(5) "1234e"
+string(5) "1234E"
+string(4) "1234"
+string(8) "65456.34"
+string(6) "234.56"
+string(0) ""
+Done
--- /dev/null
+--TEST--
+filter_data() and FS_EMAIL
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("a@b.c", FS_EMAIL));
+var_dump(filter_data("a[!@#$%^&*()@a@#$%^&*(.com@#$%^&*(", FS_EMAIL));
+var_dump(filter_data("white space here \ \ \" som more", FS_EMAIL));
+var_dump(filter_data("", FS_EMAIL));
+var_dump(filter_data("123456789000000", FS_EMAIL));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(5) "a@b.c"
+string(30) "a[!@#$%^&*@a@#$%^&*.com@#$%^&*"
+string(21) "whitespaceheresommore"
+string(0) ""
+string(15) "123456789000000"
+Done
--- /dev/null
+--TEST--
+filter_data() and FS_UNSAFE_RAW
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("}\"<p>test para</p>", FS_UNSAFE_RAW, FILTER_FLAG_ENCODE_AMP));
+var_dump(filter_data("a[!@#<b>$%^&*()@a@#$%^&*(.<br>com@#$%^&*(", FS_UNSAFE_RAW, FILTER_FLAG_ENCODE_AMP));
+var_dump(filter_data("white space here \ \ \" some more", FS_UNSAFE_RAW, FILTER_FLAG_ENCODE_AMP));
+var_dump(filter_data("", FS_UNSAFE_RAW, FILTER_FLAG_ENCODE_AMP));
+var_dump(filter_data(" 123456789000000 <qwertyuiop> ", FS_UNSAFE_RAW, FILTER_FLAG_ENCODE_AMP));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(18) "}"<p>test para</p>"
+string(53) "a[!@#<b>$%^&*()@a@#$%^&*(.<br>com@#$%^&*("
+string(32) "white space here \ \ " some more"
+string(0) ""
+string(48) " 123456789000000 <qwertyuiop> "
+Done
--- /dev/null
+--TEST--
+filter_data() and FS_ENCODED
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("\"<br>blah</ph>", FS_ENCODED));
+var_dump(filter_data("", FS_ENCODED));
+var_dump(filter_data(" text here ", FS_ENCODED));
+var_dump(filter_data("!@#$%^&*()QWERTYUIOP{ASDFGHJKL:\"ZXCVBNM<>?", FS_ENCODED));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(26) "%22%3Cbr%3Eblah%3C%2Fph%3E"
+string(0) ""
+string(23) "%20%20text%20here%20%20"
+string(74) "%21%40%23%24%25%5E%26%2A%28%29QWERTYUIOP%7BASDFGHJKL%3A%22ZXCVBNM%3C%3E%3F"
+Done
--- /dev/null
+--TEST--
+filter_data() and FS_STRING
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("", FS_STRING));
+var_dump(filter_data("<>", FS_STRING));
+var_dump(filter_data("<>!@#$%^&*()'\"", FS_STRING, FILTER_FLAG_NO_ENCODE_QUOTES));
+var_dump(filter_data("<>!@#$%^&*()'\"", FS_STRING, FILTER_FLAG_ENCODE_AMP));
+var_dump(filter_data("<>`1234567890", FS_STRING));
+var_dump(filter_data("`123`", FS_STRING));
+var_dump(filter_data(".", FS_STRING));
+
+echo "Done\n";
+?>
+--EXPECT--
+NULL
+NULL
+string(12) "!@#$%^&*()'""
+string(32) "!@#$%^&*()&#39;&#34;"
+string(11) "`1234567890"
+string(5) "`123`"
+string(1) "."
+Done
--- /dev/null
+--TEST--
+filter_data() and FS_STRIPPED
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("<p>Let me <font color=\"#000000\">see</font> you <br /><b>Stripped</b> down to the bone</p>", FS_STRIPPED));
+var_dump(filter_data("!@#$%^&*()><<>+_\"'<br><p /><li />", FS_STRIPPED));
+var_dump(filter_data("", FS_STRIPPED));
+
+var_dump(filter_data("<p>Let me <font color=\"#000000\">see</font> you <br /><b>Stripped</b> down to the bone</p>", FS_STRIPPED, FILTER_FLAG_STRIP_LOW));
+var_dump(filter_data("!@#$%^&*()><<>+_\"'<br><p /><li />", FS_STRIPPED, FILTER_FLAG_STRIP_LOW));
+var_dump(filter_data("", FS_STRIPPED, FILTER_FLAG_STRIP_LOW));
+
+var_dump(filter_data("<p>Let me <font color=\"#000000\">see</font> you <br /><b>Stripped</b> down to the bone</p>", FS_STRIPPED, FILTER_FLAG_STRIP_HIGH));
+var_dump(filter_data("!@#$%^&*()><<>+_\"'<br><p /><li />", FS_STRIPPED, FILTER_FLAG_STRIP_HIGH));
+var_dump(filter_data("", FS_STRIPPED, FILTER_FLAG_STRIP_HIGH));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(40) "Let me see you Stripped down to the bone"
+string(11) "!@#$%^&*()>"
+NULL
+string(40) "Let me see you Stripped down to the bone"
+string(11) "!@#$%^&*()>"
+NULL
+string(40) "Let me see you Stripped down to the bone"
+string(11) "!@#$%^&*()>"
+NULL
+Done
--- /dev/null
+--TEST--
+filter_data() and FS_ENCODED
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FS_ENCODED));
+var_dump(filter_data("<data&sons>", FS_ENCODED));
+var_dump(filter_data("", FS_ENCODED));
+
+var_dump(filter_data("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FS_ENCODED, FILTER_FLAG_ENCODE_LOW));
+var_dump(filter_data("<data&sons>", FS_ENCODED, FILTER_FLAG_ENCODE_LOW));
+var_dump(filter_data("", FS_ENCODED, FILTER_FLAG_ENCODE_LOW));
+
+var_dump(filter_data("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FS_ENCODED, FILTER_FLAG_ENCODE_HIGH));
+var_dump(filter_data("<data&sons>", FS_ENCODED, FILTER_FLAG_ENCODE_HIGH));
+var_dump(filter_data("", FS_ENCODED, FILTER_FLAG_ENCODE_HIGH));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(75) "%3F%3E%3C%21%40%23%24%25%5E%26%2A%28%29%7D%7B%7EQwertyuilfdsasdfgmnbvcxcvbn"
+string(17) "%3Cdata%26sons%3E"
+string(0) ""
+string(75) "%3F%3E%3C%21%40%23%24%25%5E%26%2A%28%29%7D%7B%7EQwertyuilfdsasdfgmnbvcxcvbn"
+string(17) "%3Cdata%26sons%3E"
+string(0) ""
+string(75) "%3F%3E%3C%21%40%23%24%25%5E%26%2A%28%29%7D%7B%7EQwertyuilfdsasdfgmnbvcxcvbn"
+string(17) "%3Cdata%26sons%3E"
+string(0) ""
+Done
--- /dev/null
+--TEST--
+filter_data() and FS_SPECIAL_CHARS
+--GET--
+
+--FILE--
+<?php
+
+var_dump(filter_data("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FS_SPECIAL_CHARS));
+var_dump(filter_data("<data&sons>", FS_SPECIAL_CHARS));
+var_dump(filter_data("", FS_SPECIAL_CHARS));
+
+var_dump(filter_data("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FS_SPECIAL_CHARS, FILTER_FLAG_ENCODE_LOW));
+var_dump(filter_data("<data&sons>", FS_SPECIAL_CHARS, FILTER_FLAG_ENCODE_LOW));
+var_dump(filter_data("", FS_SPECIAL_CHARS, FILTER_FLAG_ENCODE_LOW));
+
+var_dump(filter_data("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FS_SPECIAL_CHARS, FILTER_FLAG_ENCODE_HIGH));
+var_dump(filter_data("<data&sons>", FS_SPECIAL_CHARS, FILTER_FLAG_ENCODE_HIGH));
+var_dump(filter_data("", FS_SPECIAL_CHARS, FILTER_FLAG_ENCODE_HIGH));
+
+var_dump(filter_data("кириллица", FS_SPECIAL_CHARS, FILTER_FLAG_ENCODE_HIGH));
+var_dump(filter_data("кириллица", FS_SPECIAL_CHARS, FILTER_FLAG_ENCODE_LOW));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(55) "?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn"
+string(23) "<data&sons>"
+string(0) ""
+string(55) "?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn"
+string(23) "<data&sons>"
+string(0) ""
+string(55) "?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn"
+string(23) "<data&sons>"
+string(0) ""
+string(108) "кириллица"
+string(18) "кириллица"
+Done
--- /dev/null
+--TEST--
+filter_data() and FC_CALLBACK
+--GET--
+
+--FILE--
+<?php
+
+/* Simple callback function */
+function test($var) {
+ return strtoupper($var);
+}
+
+var_dump(filter_data("data", FC_CALLBACK, "test"));
+var_dump(filter_data("~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?\"}{:", FC_CALLBACK, "test"));
+var_dump(filter_data("", FC_CALLBACK, "test"));
+var_dump(filter_data("qwe", FC_CALLBACK, "no such func"));
+var_dump(filter_data("qwe", FC_CALLBACK, ""));
+var_dump(filter_data("qwe", FC_CALLBACK));
+
+/* Simple class method callback */
+class test_class {
+ static function test ($var) {
+ return strtolower($var);
+ }
+}
+
+var_dump(filter_data("dAtA", FC_CALLBACK, array("test_class", "test")));
+var_dump(filter_data("~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?\"}{:", FC_CALLBACK, array("test_class","test")));
+var_dump(filter_data("", FC_CALLBACK, array("test_class","test")));
+
+/* empty function without return value */
+function test1($var) {
+}
+
+var_dump(filter_data("data", FC_CALLBACK, "test1"));
+var_dump(filter_data("~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?\"}{:", FC_CALLBACK, "test1"));
+var_dump(filter_data("", FC_CALLBACK, "test1"));
+
+/* attempting to change data by reference */
+function test2(&$var) {
+ $var = 1;
+}
+
+var_dump(filter_data("data", FC_CALLBACK, "test2"));
+var_dump(filter_data("~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?\"}{:", FC_CALLBACK, "test2"));
+var_dump(filter_data("", FC_CALLBACK, "test2"));
+
+/* unsetting data */
+function test3(&$var) {
+ unset($var);
+}
+
+var_dump(filter_data("data", FC_CALLBACK, "test3"));
+var_dump(filter_data("~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?\"}{:", FC_CALLBACK, "test3"));
+var_dump(filter_data("", FC_CALLBACK, "test3"));
+
+/* unset data and return value */
+function test4(&$var) {
+ unset($var);
+ return 1;
+}
+
+var_dump(filter_data("data", FC_CALLBACK, "test4"));
+
+/* thrown exception in the callback */
+function test5(&$var) {
+ throw new Exception("test");
+}
+
+try {
+ var_dump(filter_data("data", FC_CALLBACK, "test5"));
+} catch (Exception $e) {
+ var_dump($e->getMessage());
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(4) "DATA"
+string(46) "~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?"}{:"
+string(0) ""
+PHP Warning: filter_data(): First argument is expected to be a valid callback in %s on line %d
+
+Warning: filter_data(): First argument is expected to be a valid callback in %s on line %d
+NULL
+PHP Warning: filter_data(): First argument is expected to be a valid callback in %s on line %d
+
+Warning: filter_data(): First argument is expected to be a valid callback in %s on line %d
+NULL
+PHP Warning: filter_data(): First argument is expected to be a valid callback in %s on line %d
+
+Warning: filter_data(): First argument is expected to be a valid callback in %s on line %d
+NULL
+string(4) "data"
+string(46) "~!@#$%^&*()_qwertyuiopasdfghjklzxcvbnm<>>?"}{:"
+string(0) ""
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+int(1)
+string(4) "test"
+Done