Sinds PHP 5.3 zijn er filter functies beschikbaar. Er zijn twee soorten filters:
Validate filters
Validatie filters worden gebruikt om te controleren of een waarde voldoet aan bepaalde voorwaarden.
boolean
if (filter_var($boolean, FILTER_VALIDATE_BOOLEAN)) { // true }
if (filter_var($email, FILTER_VALIDATE_EMAIL)) { // true }
float
if (filter_var($float, FILTER_VALIDATE_FLOAT)) { // true }
int
if (filter_var($int, FILTER_VALIDATE_INT)) { // true }
if (filter_var($year, FILTER_VALIDATE_INT, array('min_range'=> 2010, 'max_range' => 2015))) { // true }
validate_ip
if (filter_var($ip_address, FILTER_VALIDATE_IP)) { // true }
validate_regexp
if (filter_var($value, FILTER_VALIDATE_REGEXP, array('options' => array('regexp => $expression)))) { // true }
validate_url
if (filter_var($url, FILTER_VALIDATE_URL)) { // true }
Sanitize filters
Sanering filters worden gebruikt om ongewenste karakters te verwijderen.
Remove all characters except letters, digits and !#$%&'*+-/=?^_`{|}~@.[].
$value = filter_var($email, FILTER_SANITIZE_EMAIL);
encoded
URL-encode string, optionally strip or encode special characters.
$value = filter_var($url, FILTER_SANITIZE_ENCODED);
magic_quotes
$value = filter_var($string, FILTER_SANITIZE_MAGIC_QUOTES);
number_float
Remove all characters except digits, +- and optionally .,eE.
$value = filter_var($float, FILTER_SANITIZE_NUMBER_FLOAT);
number_int
Remove all characters except digits, plus and minus sign.
$value = filter_var($int, FILTER_SANITIZE_NUMBER_INT);
special_chars
HTML-escape '"<>& and characters with ASCII value less than 32, optionally strip or encode other special characters.
$value = filter_var($string, FILTER_SANITIZE_SPECIAL_CHARS);
full_special_chars
$value = filter_var($string, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
string
Strip tags, optionally strip or encode special characters.
$value = filter_var($string, FILTER_SANITIZE_STRING);
stripped
Alias voor FILTER_SANITIZE_STRING
url
Remove all characters except letters, digits and $-_.+!*'(),{}|\^~[]`<>#%";/?:@&=.
$value = filter_var($string, FILTER_SANITIZE_URL);
unsafe_raw
$value = filter_var($string, FILTER_UNSAFE_RAW);
Deze filter doet niks, tenzij er een extra parameter (Filter Flags) wordt toegevoegd
Superglobals
In plaats van gebruik te maken van superglobals kan je ook de input variabelen opvragen:
- INPUT_GET
- INPUT_POST
- INPUT_COOKIE
- INPUT_ENV
- INPUT_SERVER
- INPUT_SESSION (nog niet geïmplemteerd)
- INPUT_REQUEST (nog niet geïmplemteerd)
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$name = filter_var(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
Formulier validatie
if ( ! filter_has_var(INPUT_POST, 'submit')) { // TRUE }
Een formulier kan met diverse functies (e.g. isset, empty, is_int, is_float, etc) en reguliere expressies gevalideerd worden.
Met validatie filters beperk je de verschillende manieren van valideren tot een manier van valideren.
Validatie filters zijn makkelijk te groeperen:
$vooraarden = array(
'email' => FILTER_VALIDATE_EMAIL,
'url' => FILTER_VALIDATE_URL,
'year' => array(
'filter' => FILTER_VALIDATE_INT,
'options'=> array('min_range' => 2010, 'max_range' => 2015)
)
);
$input = filter_input_array(INPUT_POST, $vooraarden);
if ($input['email'] === false) { // Email is invalid }
if ($input['url'] === false) { // URL is invalid }
if ($input['year'] === false) { // Year is invalid }
Callback
Met de callback functionaliteit is het mogelijk om de filter functies snel te implementeren in een bestaand framework.
Class Validate
{
public static function valid_country()
{
// @todo some validation
return true;
}
}
if (filter_var($value, 'countries' => array(
'filter' => FILTER_CALLBACK,
'options' => 'Validate::valid_country'
)) == true) { // Country is valid }