portseven: Filter String Problem

Tag,

wenn ich

if(!filter_var(..., Filter_sanitize_string))  {
$err = 'fehler';
} else {
echo 'erfolgreich';
}

einsetze, dann klappt es auch.

Problem:

Wenn ich meine Eingabe so mache:

<<<<TEXTEXT dann zeigt er mir "Fehler" an.

Wenn ich es so schreibe: TEXTTEXT<<< dann sagt er erfolgreich, aber filtert es trotzdem. Wie kann das sein das der Filter sozusagen True ist da er es filtert aber nicht "Fehler" anzeigt?

  1. Hallo @portseven,

    Deine if ist nicht Typesicher.
    Die Filterung von '<<<<TEXTEXT' ergibt einen ''(Leerstring) der als FALSE gewertet wird.

    var_dump(filter_var('<<<<TEXTEXT', FILTER_SANITIZE_STRING)); // string ''         (length=0)
    
    var_dump(filter_var('TEXTTEXT<<<', FILTER_SANITIZE_STRING)); // string 'TEXTTEXT' (length=8)
    

    filter_var() gibt im Fehlerfall ein FALSE zurück. Sonst die gefilterten Daten.


    Vllt hilft folgendes noch beim Verständnis:

    $text = 'Lorem <span>ipsum</span>';
    
    $foo = filter_var($text, FILTER_SANITIZE_STRING);
    
    if ($foo === FALSE) {
        echo 'ERROR: die Filterung ist fehlgeschlagen.';
    }
    
    if ($foo !== $text) {
        echo 'Der Text wurde erfolgreich bereinigt und lautet nun: "'. $foo . '"';
    }
    
    if ($foo === $text) {
        echo 'Der Text war von Beginn an rein und wurde daher nicht verändert.';
    }