Filters in PHP 5

  1. Inleiding
  2. Wat is externe data?
  3. Filters en constanten
  4. Functies voor het toepassen van filters
  5. Filteren van GET en POST waarden
  6. Flags en options
  7. Callback filter
  8. Slotwoord en referenties
  9. Reacties op deze tutorial

Filters en constanten

Voordat ik de eigenlijke werking van de filters bespreek, zal ik eerst een overzicht geven van de beschikbare filters in PHP. Ook zal ik een overzicht geven van voorgedefinieerde constanten die je gebruikt als je werkt met filters. Beschouw deze pagina dus als benodigde voorkennis en vraag je nog even niet af hoe we die filters nu in een script verwerken. Aan die punten besteed ik verder op in deze tutorial aandacht.

Filters
De filters in PHP zijn onder te verdelen in 2 categorieen.

  • Logical filters: controleren van data op juistheid van type en formaat.
  • Sanitizing filters: toestaan of weigeren van bepaalde tekens in een variabele en desnoods de variabele aanpassen.

Het eerste type filters kun je gebruiken om de inhoud van variabelen te valideren. Controleer bijvoorbeeld of een variabele een integer, boolean of float is of dat de inhoud een geldig email adres, url of ip adres is. Dit type filters is herkenbaar aan het VALIDATE gedeelte in de naam van de filter. De volgende logical filters zijn beschikbaar:

  • FILTER_VALIDATE_INT - Controleert of een variabele een integer is
  • FILTER_VALIDATE_BOOLEAN - Controleert of een variabele een boolean is
  • FILTER_VALIDATE_FLOAT - Controleert of een variabele een float is
  • FILTER_VALIDATE_REGEXP - Controleert of een variabele aan een bepaalde reguliere expressie voldoet
  • FILTER_VALIDATE_URL - Controleert of een variabele een geldig formaat voor een url heeft
  • FILTER_VALIDATE_EMAIL - Controleert of een variabele een geldig formaat voor een email adres heeft

Het tweede type filter is herkenbaar aan het SANITZE gedeelte in de naam en controleert de inhoud van variabelen op aanwezigheid van bepaalde karakters. Afhankelijk van de filter worden deze karakters toegestaan, verwijderd of bijvoorbeeld geencodeerd. Van dit type kent PHP onder andere de volgende filters:

  • FILTER_SANITIZE_STRING - Verwijdert tags uit een string
  • FILTER_SANITIZE_ENCODED - Levert het zelfde resultaat als de urlencode() functie
  • FILTER_SANITIZE_SPECIAL_CHARS - Escaped alle HTML tekens in een string
  • FILTER_SANITIZE_EMAIL - Verwijdert alle tekens uit een string die niet in een email adres voorkomen
  • FILTER_SANITIZE_NUMBER_INT - Verwijdert alle tekens behalve cijfers, + en -

Flags
Bij het gebruik van bepaalde filters is het mogelijk om zogenaamde flags mee te geven. Deze flags passen de werking van een filter aan. Zo kun je aan FILTER_VALIDATE_URL bijvoorbeeld de flag FILTER_FLAG_HOST_REQUIRED meegeven. In dat geval zal ook gecontroleerd worden of er wel een host aanwezig is in de gecontroleerd url.

Elke filter kent zijn eigen flags en het toepassen daarvan is optioneel.

Options
Sommige filters kennen naast de flags ook nog zogenaamde options. Deze options geven iets meer informatie aan de filter waar rekening mee gehouden moet worden. Zo moet je bijvoorbeeld bij FILTER_VALIDATE_REGEXP de gebruikte reguliere expressie als option meegeven.

In sommige gevallen zijn deze options vereist, maar meestal zijn ze optioneel.

Voorgedefinieerde constanten
De namen van filters en flags die hierboven aangegeven zijn, zijn allemaal voorbeelden van voorgedefinieerde constanten. Ze verwijzen in werkelijkheid naar een bepaald getal waaraan PHP herkent welke filter er gebruikt moet worden. Hoewel het mogelijk is om ook dit getal als aanduiding voor een filter te gebruiken, zou ik om het overzicht van je code te bewaren toch aanraden om de voorgedefinieerde constante te gebruiken.

Naast de namen van filters en flags zijn er nog een aantal constanten die vooraf bepaald zijn. De belangrijkste zijn

  • INPUT_POST
  • INPUT_GET

Zoals de namen al doen vermoeden verwijzen deze constanten naar de gegevens uit respectievelijk de $_POST en $_GET arrays. We zullen zien dat deze constanten bij het werken met filters nog al eens van pas komen.

Een volledig overzicht van alle filters, flags, options en constanten is te vinden in de php.net handleiding. Daarnaast kun je de filter_list() functie gebruiken om te kijken welke filters op jouw eigen server beschikbaar zijn. Gebruik daarvoor bijvoorbeeld het volgende scriptje:

Voorbeeld 2: Controleren welke filters beschikbaar zijn
Code
1
2
3
4
5
<?php
echo '<pre>';
print_r(filter_list());
echo 
'</pre>';
?>


In mijn geval geeft dat het volgende resultaat:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Array
(
    [0] => int
    [1] => boolean
    [2] => float
    [3] => validate_regexp
    [4] => validate_url
    [5] => validate_email
    [6] => validate_ip
    [7] => string
    [8] => stripped
    [9] => encoded
    [10] => special_chars
    [11] => unsafe_raw
    [12] => email
    [13] => url
    [14] => number_int
    [15] => number_float
    [16] => magic_quotes
    [17] => callback
)

Vorige Volgende