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| Parameter | Erforderlich | Beschreibung |
|---|---|---|
$value | ja | Der zu filternde Wert. |
$filter | nein | Die anzuwendende Filter-ID, z. B. FILTER_VALIDATE_INT. Standardmäßig FILTER_DEFAULT, was keine Filterung durchführt. |
$options | nein | Ein 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
Die nützlichsten Validate-Filter sind:
| Filter | Validiert |
|---|---|
FILTER_VALIDATE_INT | Eine ganze Zahl (optional innerhalb von min_range/max_range). |
FILTER_VALIDATE_FLOAT | Eine Gleitkommazahl. |
FILTER_VALIDATE_BOOLEAN | "1", "true", "on", "yes" → true; "0", "false", "off", "no", "" → false. |
FILTER_VALIDATE_EMAIL | Eine E-Mail-Adresse. |
FILTER_VALIDATE_URL | Eine URL. |
FILTER_VALIDATE_IP | Eine IPv4/IPv6-Adresse. |
FILTER_VALIDATE_REGEXP | Ein 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:
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
Häufig verwendete Sanitize-Filter:
| Filter | Wirkung |
|---|---|
FILTER_SANITIZE_EMAIL | Entfernt in einer E-Mail unzulässige Zeichen. |
FILTER_SANITIZE_URL | Entfernt in einer URL unzulässige Zeichen. |
FILTER_SANITIZE_NUMBER_INT | Behält Ziffern sowie +/-. |
FILTER_SANITIZE_NUMBER_FLOAT | Behält Ziffern, +/- und (mit Flags) .,e. |
FILTER_SANITIZE_SPECIAL_CHARS | HTML-codiert <, >, &, " und andere Zeichen. |
FILTER_SANITIZE_FULL_SPECIAL_CHARS | Wie htmlspecialchars() mit ENT_QUOTES. |
Hinweis:
FILTER_SANITIZE_STRINGwurde in PHP 8.1 als veraltet markiert. Zum Bereinigen von Strings für die HTML-Ausgabe isthtmlspecialchars()am Ausgabepunkt vorzuziehen.
Optionen und Flags verwenden
Das dritte Argument verfeinert einen Filter. Übergeben Sie es als array mit 'options' (und optional 'flags'):
Flags können auch direkt als drittes Argument übergeben werden, wenn die array-Form nicht benötigt wird:
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 Siefilter_var_array()oder für Request-Datenfilter_input_array().FILTER_VALIDATE_BOOLEANgibtnull(nichtfalse) für nicht erkannte Werte zurück, nur wenn SieFILTER_NULL_ON_FAILUREübergeben; andernfalls wirdfalsezurückgegeben.- Verlassen Sie sich nicht auf Sanitize-Filter für sicherheitskritisches Output-Escaping — maskieren Sie stattdessen zum Zeitpunkt der Ausgabe.
Verwandte Themen
filter_var_array()— viele Variablen in einem Aufruf filtern.filter_input_array()— Request-Daten filtern ($_GET,$_POST).- PHP-Formularvalidierung — diese Filter in echten Formularen einsetzen.
- URL & E-Mail in PHP validieren
htmlspecialchars()— Maskierung für sichere HTML-Ausgabe.trim()— Leerzeichen vor dem Filtern entfernen.
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.