Callback filter

Met de FILTER_CALLBACK filter is het mogelijk om elke willekeurige php functie te gebruiken om onze gegevens te filteren. De gebruikte functies mogen zelf geschreven functies zijn maar ook reeds bestaande php functies. Op deze manier kunnen we dus helemaal zelf bepalen hoe we onze data willen filteren.

Voorbeeld 16: Spaties vervangen door underscores

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
function space2underscore($string)
{

    return str_replace(' ', '_', $string);
}


$string = 'Een string met spaties';
$string = filter_var($string, FILTER_CALLBACK, array('options' => 'space2underscore'));

echo $string; // Output: Een_string_met_spaties
?>

In dit scriptje hebben we een functie genaamd space2underscore(). Met behulp van de FILTER_CALLBACK filter passen we deze functie toe op de te filteren variabele.

Hetzelfde is mogelijk met een reeds bestaande php functie.

Voorbeeld 17: Allemaal hoofdletters
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$string
= 'een string zonder hoofdletters';
$string = filter_var($string, FILTER_CALLBACK, array('options' => 'strtoupper'));

echo $string; // Output: EEN STRING ZONDER HOOFDLETTERS
?>


Ook kunnen we met deze filter een methode uit een klasse gebruiken om toe te passen op de filteren variabele.

Voorbeeld 18: Methode uit een klasse als filter
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class myClass
{
    public function space2underscore($string)
    {

        return str_replace(' ', '_', $string);
    }
}


$string = 'Een string met spaties';
$string = filter_var($string, FILTER_CALLBACK, array('options' => array('myClass', 'space2underscore')));

echo $string; // Output: Een_string_met_spaties
?>


De FILTER_CALLBACK filter is ook toe te passen op arrays. Waar we vroeger gebruik moesten maken van functies als array_walk() om callback functies uit te voeren op waarden in een array, kunnen we daar nu een filter voor gebruiken.

Voorbeeld 19: Filter een array met CALLBACK
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function space2underscore($string)
{

    return str_replace(' ', '_', $string);
}


$input = array('deze array', 'bevat strings', 'met spaties');
$output = filter_var($input, FILTER_CALLBACK, array('options' => 'space2underscore'));

echo '<pre>';
print_r($output);
echo '</pre>';
?>

De output van dit scriptje is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
Array
(
    [0] => deze_array
    [1] => bevat_strings
    [2] => met_spaties
)


De CALLBACK filters is de meest veelzijdige uit het rijtje filters dat PHP biedt. Deze filter zorgt ervoor dat je ook zelf filters kunt schrijven.

Een ander voorbeeld waar je deze filter bijvoorbeeld heel goed zou kunnen gebruiken is bij het beveiligen van data die naar een database geschreven moet worden. Het voorbeeld van de verwerking van het POST formulier kan dan iets uitgebreid worden.

Voorbeeld 20: Beveiligen van data voor database query
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
/* Velden uit een POST formulier:
- leeftijd
- string
- email
*/

// Array met filters die op de verschillende velden toegepast worden.

$filters = array(
    'leeftijd' => FILTER_VALIDATE_INT,
    'string' => FILTER_SANITIZE_SPECIAL_CHARS,
    'email' => FILTER_VALIDATE_EMAIL,
    'bestaat_niet' => FILTER_VALIDATE_INT );

$resultaten = filter_input_array(INPUT_POST, $filters);

// Uitlezen van de filterresultaten.
foreach($resultaten as $veld => $resultaat)
{

    if(is_null($resultaat))
    {

        $error = true;
        $errors[] = '<p>Je bent vergeten om '.$veld.' in te vullen.</p>';
    }

    elseif($resultaat === FALSE)
    {

        $error = true;
        $errors[] = '<p>Je hebt geen geldige waarde ingevuld voor: '.$veld.'</p>';
    }

    else
    {
        $error = false;
        $data[$veld] = $resultaat;
    }
}


if($error === TRUE)
{

// Als er fouten opgetreden zijn bij 1 of meer filters
    foreach($errors as $error)
    {

        echo $error;
    }
}

else
{
// Geen fouten? Data beveiligen en wegschrijven.
    $data = filter_var($data, FILTER_CALLBACK, 'mysql_real_escape_string');
    // $data bevat waarden geschikt voor een database query.
}
?>

De array $data bevat nu allemaal waarden die gereed zijn om ingevoerd te worden in een database zonder dat dit problemen oplevert.

Een laatste voorbeeld dat ik wil geven is het gebruik van een CALLBACK filter om meerdere filters op een waarde toe te passen.

Voorbeeld 21: Meerdere filters toepassen op 1 variabele
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
function filterData($var)
{

    // Controleer of de variabele wel een string is.
    if(!is_string($var))
    {

        return false;
    }

    else
    {
        // Alle HTML tags uit de string strippen
        $var = filter_var($var, FILTER_SANITIZE_STRING);
        
        // De & encoderen
        $var = filter_var($var, FILTER_UNSAFE_RAW, FILTER_FLAG_ENCODE_AMP);
        
        // Alleen het eerste teken is een hoofdletter
        $var = filter_var($var, FILTER_CALLBACK, array('options' => 'strtolower'));
        $var = filter_var($var, FILTER_CALLBACK, array('options' => 'ucfirst'));
    }

    
    return $var;
}


// Een voorbeeld string
$string = 'deze zin bevat <html> tags & RandoM hOOfdletters';

// Filteren en weergeven van de string
$string = filter_var($string, FILTER_CALLBACK, array('options' => 'filterData'));
echo $string;
?>

Het resultaat van dit script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Deze zin bevat  tags &#38; random hoofdletters

« Lees de omschrijving en reacties

Inhoudsopgave

  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

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.