Flags en options
Tot op dit moment hebben we alleen nog de standaard instelling van verschillende filters gebruiken. Maar zoals ik eerder al aangaf hebben we ook de beschikking over verschillende flags en options die de werking van een bepaalde filter iets wijzigen. Flags en options worden als extra parameter(s) aan filter functies meegegeven.
Flags
Een flag die toe te passen is op alle filters is FILTER_NULL_ON_FAILURE. Deze flag zorgt ervoor dat de filters NULL in plaats van FALSE retourneren als een filter mislukt.
Voorbeeld 11: Return NULL als de filter mislukt
2
3
4
5
6
$leeftijd = '19 jaar';
$leeftijd = filter_var($leeftijd, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);
var_dump($leeftijd); // Output: NULL
?>
Een ander voorbeeld van flags dat ik wil geven is er een met de FILTER_SANITIZE_STRING filter. Deze filter kent verschillende flags. Ik maak nu gebruik van de flag FILTER_FLAG_ENCODE_AMP. Deze flag zorgt ervoor dat een & in de input geencodeerd wordt.
Voorbeeld 12: Encoden van een &
2
3
4
5
6
$input = 'Een string met & erin';
$output = filter_var($input, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_AMP);
echo $output;
?>
In eerste instantie lijkt er niets veranderd is als we $output echoen. Maar als we naar de bron van de pagina kijken, zien we dat de & wel degelijk geencodeerd is:
Ook is het mogelijk om meerdere flags tegelijk toe te passen. Deze flags moeten dan gescheiden worden door een |.
Voorbeeld 13: Meerdere flags gebruiken
2
3
4
5
// $_POST['naam']: Johnny Weißmüller <b>Jr</b>
$naam = filter_input(INPUT_POST, 'naam' , FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW);
echo $naam;
?>
Wederom lijkt er niets veranderd maar de broncode wijst iets anders uit:
Options
Naast flags zijn er ook nog een aantal filters waarbij een option meegegeven kan worden. Net als een flag worden options als extra parameter aan de filter functie meegegeven. Als er options meegegeven worden, wordt de derde parameter altijd een associatieve array met de options onder de key 'options'.
Voorbeeld 14: Filter integers in een bepaalde range
De filter geeft nu FALSE terug omdat 19 niet in de range van 20 tot 25 valt.
Natuurlijk zijn al deze feiten ook weer te combineren in bijvoorbeeld de verwerking van een formulier. Als je echter flags of options gaat toepassen, zul je de array met filters multidimensionaal moeten maken. Per key krijg je dan weer een array met daarin de filter en eventuele flags of options.
Voorbeeld 15: De verwerking van een gepost formulier
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* Velden uit een POST formulier:
- leeftijd
- string
*/
$filters = array(
'leeftijd' => array (
'filter' => FILTER_VALIDATE_INT,
'options' => array('min_range' => 20, 'max_range' => 25)
);
'string' => array (
'filter' => FILTER_SANITIZE_SPECIAL_CHARS,
'flags' => FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW
);
'email' => FILTER_VALIDATE_EMAIL,
'bestaat_niet' => FILTER_VALIDATE_INT
);
$resultaten = filter_input_array(INPUT_POST, $filters);
?>
Dit voorbeeld laat duidelijk zien hoe de array met filters opgebouwd dient te worden als er zowel filters als flags of options toegepast worden.
Inhoudsopgave
- Inleiding
- Wat is externe data?
- Filters en constanten
- Functies voor het toepassen van filters
- Filteren van GET en POST waarden
- Flags en options
- Callback filter
- Slotwoord en referenties