W3docs

filter_var()

PHP bietet integrierte Funktionen zur Filterung und Validierung von Benutzereingaben. filter_var() dient zum Filtern und Bereinigen von Daten.

Einführung

filter_var() ist PHPs integriertes Werkzeug zum Validieren und Bereinigen einzelner Werte. Validieren bedeutet, zu prüfen, ob ein Wert einer erwarteten Form entspricht (eine echte E-Mail, eine ganze Zahl in einem Bereich, eine gültige URL), und den Wert bei Erfolg oder false bei Misserfolg zurückzugeben. Bereinigen bedeutet, einen Wert zu säubern, indem Zeichen, die nicht dazu gehören, entfernt oder maskiert werden.

Vertrauen Sie niemals Daten, die von außerhalb Ihres Skripts stammen — Formularfelder, Query-Strings, Cookies, API-Payloads. Diese vor dem Speichern, Anzeigen oder Verarbeiten durch filter_var() zu leiten, ist eine der einfachsten Möglichkeiten, Ihre Anwendung sicher und vorhersehbar zu halten. Diese Seite behandelt die Syntax, die beiden Modi (Validieren vs. Bereinigen), die gebräuchlichen Filter und Flags sowie die Fallstricke, über die man leicht stolpert.

Syntax

filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed
ParameterErforderlichBeschreibung
$valuejaDer zu filternde Wert.
$filterneinDie anzuwendende Filter-ID, z. B. FILTER_VALIDATE_INT. Standardmäßig FILTER_DEFAULT, was keine Filterung durchführt.
$optionsneinEin assoziatives Array mit Optionen/Flags oder eine einzelne Flag-Konstante zur Feinabstimmung des Filters.

Rückgabewert: der gefilterte (und ggf. konvertierte) Wert bei Erfolg oder false bei Misserfolg. Beachten Sie, dass ein validate-Filter den Wert selbst zurückgibt — vergleichen Sie daher immer mit ===, wenn der gültige Wert falsy sein könnte (wie 0 oder ein leerer string).

Daten validieren

Validierung beantwortet eine Ja/Nein-Frage: Ist dieser Wert akzeptabel? Der Filter gibt bei Erfolg den Wert und bei Misserfolg false zurück.

Eine E-Mail-Adresse validieren

php— editable, runs on the server

Die nützlichsten Validate-Filter sind:

FilterValidiert
FILTER_VALIDATE_INTEine ganze Zahl (optional innerhalb von min_range/max_range).
FILTER_VALIDATE_FLOATEine Gleitkommazahl.
FILTER_VALIDATE_BOOLEAN"1", "true", "on", "yes"true; "0", "false", "off", "no", ""false.
FILTER_VALIDATE_EMAILEine E-Mail-Adresse.
FILTER_VALIDATE_URLEine URL.
FILTER_VALIDATE_IPEine IPv4/IPv6-Adresse.
FILTER_VALIDATE_REGEXPEin Wert, der einem PCRE-Muster entspricht.

Die === false-Falle

Da ein Validate-Filter den Wert zurückgibt, ist ein Ergebnis von 0 oder "0" gültig, aber falsy. Verwenden Sie stets einen strikten Vergleich:

php— editable, runs on the server

Daten bereinigen

Die Bereinigung lehnt einen Wert nicht ab — sie säubert ihn und gibt den bereinigten string zurück.

Eine E-Mail-Adresse bereinigen

php— editable, runs on the server

Häufig verwendete Sanitize-Filter:

FilterWirkung
FILTER_SANITIZE_EMAILEntfernt in einer E-Mail unzulässige Zeichen.
FILTER_SANITIZE_URLEntfernt in einer URL unzulässige Zeichen.
FILTER_SANITIZE_NUMBER_INTBehält Ziffern sowie +/-.
FILTER_SANITIZE_NUMBER_FLOATBehält Ziffern, +/- und (mit Flags) .,e.
FILTER_SANITIZE_SPECIAL_CHARSHTML-codiert <, >, &, " und andere Zeichen.
FILTER_SANITIZE_FULL_SPECIAL_CHARSWie htmlspecialchars() mit ENT_QUOTES.

Hinweis: FILTER_SANITIZE_STRING wurde in PHP 8.1 als veraltet markiert. Zum Bereinigen von Strings für die HTML-Ausgabe ist htmlspecialchars() am Ausgabepunkt vorzuziehen.

Optionen und Flags verwenden

Das dritte Argument verfeinert einen Filter. Übergeben Sie es als array mit 'options' (und optional 'flags'):

php— editable, runs on the server

Flags können auch direkt als drittes Argument übergeben werden, wenn die array-Form nicht benötigt wird:

php— editable, runs on the server

Validieren vs. Bereinigen — wann was verwenden

  • Validieren, wenn Sie eine Ja/Nein-Entscheidung benötigen: die Anfrage ablehnen, einen Fehler anzeigen, erneut versuchen. Verwenden Sie Validate-Filter für E-Mails, Zahlen, URLs und IPs in Formularen und APIs.
  • Bereinigen, wenn Sie die Eingabe akzeptieren müssen, aber gefährliche oder fehlerhafte Zeichen vor der Verwendung entfernen möchten.
  • Beide ergänzen sich — ein verbreitetes Muster ist, die Eingabe zu validieren und die Ausgabe zu maskieren (z. B. mit htmlspecialchars()), anstatt sich allein auf Sanitize-Filter zu verlassen.

Häufige Fallstricke

  • Ein Validate-Filter gibt den Wert zurück, nicht true. Vergleichen Sie mit === false, um Misserfolge zu erkennen.
  • filter_var() arbeitet mit einem einzelnen skalaren Wert. Um viele Werte auf einmal zu filtern, verwenden Sie filter_var_array() oder für Request-Daten filter_input_array().
  • FILTER_VALIDATE_BOOLEAN gibt null (nicht false) für nicht erkannte Werte zurück, nur wenn Sie FILTER_NULL_ON_FAILURE übergeben; andernfalls wird false zurückgegeben.
  • Verlassen Sie sich nicht auf Sanitize-Filter für sicherheitskritisches Output-Escaping — maskieren Sie stattdessen zum Zeitpunkt der Ausgabe.

Verwandte Themen

Fazit

filter_var() ist ein kompakter, zuverlässiger Weg, um einzelne Werte in PHP zu validieren und zu bereinigen. Verwenden Sie die Validate-Filter, um Eingaben anzunehmen oder abzulehnen, die Sanitize-Filter, um sie zu bereinigen, und denken Sie daran, Validate-Ergebnisse mit === false zu vergleichen. In Kombination mit filter_var_array() für Massendaten und htmlspecialchars() für die Ausgabe bildet es das Rückgrat einer sicheren Eingabeverarbeitung.

Übungen

Übung
Was ist die Funktion von filter_var() in PHP?
Was ist die Funktion von filter_var() in PHP?
Was this page helpful?