Note: FILTER_NULL_ON_FAILURE, FILTER_REQUIRE_SCALAR, FILTER_REQUIRE_ARRAY and FILTER_FORCE_ARRAY dont have prefix "FILTER_FLAG_" but they are FLAGS!Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.
Diese Konstanten werden von filter_input() und filter_input_array(). verwendet.
INPUT_POST
(int)
POST-Variablen.
INPUT_GET
(int)
GET-Variablen.
COOKIE-Variablen.
INPUT_ENV
(int)
ENV-Variablen.
INPUT_SERVER
(int)
SERVER-Variablen.
INPUT_SESSION
(int)
SESSION-Variablen. (Entfernt ab PHP 8.0.0; war vorher nicht implementiert)
INPUT_REQUEST
(int)
REQUEST-Variablen. (Entfernt ab PHP 8.0.0; war vorher nicht implementiert)
FILTER_FLAG_NONE
(int)
Keine Flags.
FILTER_REQUIRE_SCALAR
(int)
Flag, das angibt, dass die Filtereingabe ein Skalar sein muss.
FILTER_REQUIRE_ARRAY
(int)
Flag, das angibt, dass die Filtereingabe ein Array sein muss.
FILTER_FORCE_ARRAY
(int)
Dieses Flag wandelt eine skalare Eingabe in ein Array mit einem Element um; für Filter, die mit Arrays arbeiten.
FILTER_NULL_ON_FAILURE
(int)
Bei Fehlern null anstelle von false verwenden.
Kann mit jedem
FILTER_VALIDATE_*-Validierungsfilter
verwendet werden.
filter.
FILTER_FLAG_STRIP_LOW
(int)
Zeichen mit einem ASCII-Wert kleiner 32 entfernen.
FILTER_FLAG_STRIP_HIGH
(int)
Zeichen mit einem ASCII-Wert größer 127 entfernen.
FILTER_FLAG_STRIP_BACKTICK
(int)
Backtick-Zeichen (`) entfernen.
FILTER_FLAG_ENCODE_LOW
(int)
Zeichen mit einem ASCII-Wert kleiner 32 kodieren.
FILTER_FLAG_ENCODE_HIGH
(int)
Zeichen mit einem ASCII-Wert größer 127 kodieren.
FILTER_FLAG_ENCODE_AMP
(int)
& kodieren.
FILTER_FLAG_NO_ENCODE_QUOTES
(int)
Einfache und doppelte Anführungszeichen (' und
") nicht kodieren.
FILTER_FLAG_EMPTY_STRING_NULL
(int)
Wenn die Bereinigung einer Zeichenkette zu einer leeren Zeichenkette
führt, den Wert in null umwandeln.
FILTER_VALIDATE_BOOL
(int)
Gibt bei den Werten "1",
1 (einschließlich binärer, oktaler und hexadezimaler
Schreibweise), 1.0,
"true", true,
"on"
und "yes" true zurück.
Gibt bei den Werten "0",
0 (einschließlich binärer, oktaler und hexadezimaler
Schreibweise), 0.0,
"false", false,
"off",
"no" und
"" false zurück.
Beim Vergleich von Zeichenketten-Werten werden Groß- und Kleinschreibung
nicht berücksichtigt.
Der Rückgabewert für nicht-boolesche Werte hängt von
FILTER_NULL_ON_FAILURE ab. Wenn es gesetzt ist, wird
null zurückgegeben, andernfalls wird false zurückgegeben.
defaultDer Wert, der zurückgegeben werden soll, wenn der Filter fehlschlägt.
Verfügbar seit PHP 8.0.0.
FILTER_VALIDATE_BOOLEAN
(int)
Alias von FILTER_VALIDATE_BOOL.
Der Alias war bereits vor der Einführung des kanonischen Namens in
PHP 8.0.0 verfügbar.
FILTER_VALIDATE_INT
(int)
Prüft, ob der Wert ein Integer ist und konvertiert im Erfolgsfall nach int.
Hinweis:
Bei Zeichenketten-Werte werden vor dem Vergleich führende und nachfolgende Leerzeichen mittels trim() entfernt.
defaultDer Wert, der zurückgegeben werden soll, wenn der Filter fehlschlägt.
min_rangeDer Wert ist nur gültig, wenn er größer oder gleich dem angegebenen Wert ist.
max_rangeDer Wert ist nur gültig, wenn er kleiner oder gleich dem angegebenen Wert ist.
FILTER_FLAG_ALLOW_OCTAL
(int)
Integer in oktaler Schreibweise (0[0-7]+) zulassen.
FILTER_FLAG_ALLOW_HEX
(int)
Integer in hexadezimaler Schreibweise
(0x[0-9a-fA-F]+) zulassen.
FILTER_VALIDATE_FLOAT
(int)
Prüft, ob der Wert eine Gleitkommazahl ist und konvertiert im Erfolgsfall nach float.
Hinweis:
Bei Zeichenketten-Werte werden vor dem Vergleich führende und nachfolgende Leerzeichen mittels trim() entfernt.
defaultDer Wert, der zurückgegeben werden soll, wenn der Filter fehlschlägt.
decimal
min_rangeDer Wert ist nur gültig, wenn er größer oder gleich dem angegebenen Wert ist. Verfügbar seit PHP 7.4.0.
max_rangeDer Wert ist nur gültig, wenn er kleiner oder gleich dem angegebenen Wert ist. Verfügbar seit PHP 7.4.0.
FILTER_FLAG_ALLOW_THOUSAND
(int)
Kommas (,), die normalerweise das
Tausender-Trennzeichen darstellen, zulassen.
FILTER_VALIDATE_REGEXP
(int)
Prüft, ob der Wert auf den regulären Ausdruck passt, der mit der Option
regexp angegeben wurde.
defaultDer Wert, der zurückgegeben werden soll, wenn der Filter fehlschlägt.
regexpPerl-kompatibler regulärer Ausdruck.
FILTER_VALIDATE_URL
(int)
Prüft, ob die URL gemäß » RFC 2396 gültig ist.
defaultDer Wert, der zurückgegeben werden soll, wenn der Filter fehlschlägt.
FILTER_FLAG_SCHEME_REQUIRED
(int)
Erfordert, dass die URL ein Schema enthält.
DEPRECATED (veraltet) seit PHP 7.3.0 und
REMOVED (entfernt) seit PHP 8.0.0.
Das liegt daran, dass es immer durch den Filter
FILTER_VALIDATE_URL impliziert wird.
FILTER_FLAG_HOST_REQUIRED
(int)
Erfordert, dass die URL einen Host enthält.
DEPRECATED (veraltet) seit PHP 7.3.0 und
REMOVED (entfernt) seit PHP 8.0.0.
Das liegt daran, dass es immer durch den Filter
FILTER_VALIDATE_URL impliziert wird.
FILTER_FLAG_PATH_REQUIRED
(int)
Erfordert, dass die URL einen Pfad enthält.
FILTER_FLAG_QUERY_REQUIRED
(int)
Erfordert, dass die URL eine Anfrage enthält.
Eine gültige URL gibt möglicherweise nicht das HTTP-Protokoll
(http://) an, weshalb eventuell eine weitere
Validierung erforderlich ist, um festzustellen, ob die URL ein erwartetes
Protokoll verwendet, z. B. ssh:// oder
mailto:.
Dieser Filter funktioniert nur bei ASCII-URLs. Das bedeutet, dass internationalisierte Domain-Namen (IDN) immer abgelehnt werden.
FILTER_VALIDATE_DOMAIN
(int)
Prüft, ob der Name der Domain gemäß » RFC 952, » RFC 1034, » RFC 1035, » RFC 1123, » RFC 2732 und » RFC 2181 gültig ist.
defaultDer Wert, der zurückgegeben werden soll, wenn der Filter fehlschlägt.
FILTER_FLAG_HOSTNAME
(int)
Erfordert, dass Hostnamen mit einem alphanumerischen Zeichen beginnen und nur alphanumerische Zeichen und Bindestriche enthalten.
FILTER_VALIDATE_EMAIL
(int)
Prüft, ob der Wert eine "gültige" E-Mail-Adresse ist.
Die Überprüfung erfolgt gemäß der addr-spec-Syntax in
» RFC 822.
Kommentare, Whitespace-Folding und punktlose Domänennamen werden jedoch
nicht unterstützt und daher zurückgewiesen.
defaultDer Wert, der zurückgegeben werden soll, wenn der Filter fehlschlägt.
FILTER_FLAG_EMAIL_UNICODE
(int)
Akzeptiert Unicode-Zeichen im lokalen Teil. Verfügbar seit PHP 7.1.0.
Die E-Mail-Validierung ist komplex, und die einzige Möglichkeit, die Gültigkeit und Existenz einer E-Mail zu bestätigen, besteht darin, eine E-Mail an die Adresse zu senden.
FILTER_VALIDATE_IP
(int)
Prüft, ob der Wert eine IP-Adresse ist.
defaultDer Wert, der zurückgegeben werden soll, wenn der Filter fehlschlägt.
FILTER_FLAG_IPV4
(int)
IPv4-Adresse zulassen.
FILTER_FLAG_IPV6
(int)
IPv6-Adresse zulassen.
FILTER_FLAG_NO_RES_RANGE
(int)
Reservierte Adressen ablehnen.
Dies sind die Bereiche, die in
» RFC 6890 als
Reserved-By-Protocol (reserviert durch das Protokoll)
gekennzeichnet sind.
Dies entspricht bei IPv4 den folgenden Bereichen:
0.0.0.0/8, 169.254.0.0/16, 127.0.0.0/8, 240.0.0.0/4.
Und für IPv6 entspricht dies den folgenden Bereichen:
::1/128, ::/128, ::FFFF:0:0/96, FE80::/10.
FILTER_FLAG_NO_PRIV_RANGE
(int)
Private Adressen ablehnen.
Dabei handelt es sich um IPv4-Adressen in folgenden Bereichen:
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.
Das sind die IPv6-Adressen, die mit FD oder
FC beginnen.
FILTER_FLAG_GLOBAL_RANGE
(int)
Nur globale Adressen zulassen.
Diese sind in » RFC 6890 zu
finden, wo das Global-Attribut
True ist.
Verfügbar seit PHP 8.2.0.
FILTER_VALIDATE_MAC
(int)
ID des "validate_mac_address"-Filters.
defaultDer Wert, der zurückgegeben werden soll, wenn der Filter fehlschlägt.
FILTER_UNSAFE_RAW
(int)
Dieser Filter bewirkt nichts.
Er kann jedoch Sonderzeichen entfernen oder kodieren, wenn er zusammen mit
den Flags
FILTER_FLAG_STRIP_* und
FILTER_FLAG_ENCODE_* für
die Bereinigungsfilter verwendet wird.
FILTER_DEFAULT
(int)
Alias von FILTER_UNSAFE_RAW.
FILTER_SANITIZE_STRING
(int)
Mit diesem Filter werden Tags entfernt und doppelte und einfache Anführungszeichen HTML-kodiert.
Optional kann er bestimmte Zeichen entfernen oder kodieren, wenn er
zusammen mit den
FILTER_FLAG_STRIP_*- und
FILTER_FLAG_ENCODE_*-Flags
für die Bereinigungsfilter verwendet wird.
Die Kodierung von Anführungszeichen kann mit dem Filterflag
FILTER_FLAG_NO_ENCODE_QUOTES deaktiviert werden.
Seit PHP 8.1.0 veraltet; stattdessen sollte htmlspecialchars() verwendet werden.
Die Art und Weise, wie dieser Filter Tags entfernt, entspricht nicht der Funktion strip_tags().
FILTER_SANITIZE_STRIPPED
(int)
Alias von FILTER_SANITIZE_STRING.
Seit PHP 8.1.0 veraltet; stattdessen sollte htmlspecialchars() verwendet werden.
FILTER_SANITIZE_ENCODED
(int)
Mit diesem Filter wird eine Zeichenkette URL-kodiert.
Optional kann er bestimmte Zeichen entfernen oder kodieren, wenn er
zusammen mit den
FILTER_FLAG_STRIP_*- und
FILTER_FLAG_ENCODE_*-Flags
für die Bereinigungsfilter verwendet wird.
FILTER_SANITIZE_SPECIAL_CHARS
(int)
Mit diesem Filter werden
', ", <, >, &
und Zeichen mit einem ASCII-Wert kleiner als 32 HTML-kodiert.
Im Gegensatz zum Filter FILTER_SANITIZE_FULL_SPECIAL_CHARS
ignoriert der Filter FILTER_SANITIZE_SPECIAL_CHARS das
Flag FILTER_FLAG_NO_ENCODE_QUOTES.
Optional kann er bestimmte Zeichen entfernen, wenn er zusammen mit den
FILTER_FLAG_STRIP_*-Flags
für die Bereinigungsfilter verwendet wird, und mit Hilfe von
FILTER_FLAG_ENCODE_HIGH kann er Zeichen mit einem
ASCII-Wert größer als 127 kodieren.
FILTER_SANITIZE_FULL_SPECIAL_CHARS
(int)
Dieser Filter entspricht dem Aufruf von
htmlspecialchars() mit der Konstante
ENT_QUOTES.
Die Kodierung von Anführungszeichen kann mit dem Filterflag
FILTER_FLAG_NO_ENCODE_QUOTES deaktiviert werden.
Wie htmlspecialchars() berücksichtigt auch dieser Filter die INI-Einstellung default_charset. Wird eine Bytefolge erkannt, die ein für den aktuellen Zeichensatz ungültiges Zeichen enthält, wird die gesamte Zeichenkette verworfen und eine leere Zeichenkette zurückgegeben.
FILTER_SANITIZE_EMAIL
(int)
Die Zeichenkette bereinigen durch Entfernen aller Zeichen außer
lateinischen Buchstaben ([a-zA-Z]), Ziffern
([0-9]) und den Sonderzeichen
!#$%&'*+-=?^_`{|}~@.[].
FILTER_SANITIZE_URL
(int)
Die Zeichenkette bereinigen durch Entfernen aller Zeichen außer
lateinischen Buchstaben ([a-zA-Z]), Ziffern
([0-9]) und den Sonderzeichen
$-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=.
FILTER_SANITIZE_NUMBER_INT
(int)
Die Zeichenkette bereinigen durch Entfernen aller Zeichen außer Ziffern
([0-9]), Plus- (+) und Minuszeichen
(-).
FILTER_SANITIZE_NUMBER_FLOAT
(int)
Die Zeichenkette bereinigen durch Entfernen aller Zeichen außer Ziffern
([0-9]), Plus- (+) und Minuszeichen
(-).
FILTER_FLAG_ALLOW_FRACTION
(int)
Das Punkt-Zeichen (.), das normalerweise das
Trennzeichen zwischen dem ganzzahligen und dem gebrochenen Teil
darstellt, zulassen.
FILTER_FLAG_ALLOW_THOUSAND
(int)
Kommas (.), die normalerweise das
Trennzeichen zwischen dem ganzzahligen und dem gebrochenen Teil
darstellen, zulassen.
FILTER_FLAG_ALLOW_SCIENTIFIC
(int)
Zahlen in wissenschaftlicher Notation akzeptieren, indem die Zeichen
e und E zugelassen werden.
Wenn das Flag FILTER_FLAG_ALLOW_FRACTION nicht
verwendet wird, wird das Dezimaltrennzeichen entfernt, wodurch sich der
empfangene Wert ändert.
<?php
$number = '12.34';
var_dump(filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT));
var_dump(filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
?>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(4) "1234" string(5) "12.34"
FILTER_SANITIZE_ADD_SLASHES
(int)
addslashes() auf die Eingabe anwenden. Verfügbar seit PHP 7.3.0.
FILTER_SANITIZE_MAGIC_QUOTES
(int)
Alias von FILTER_SANITIZE_ADD_SLASHES.
DEPRECATED (veraltet) seit PHP 7.3.0 und REMOVED (entfernt) seit PHP 8.0.0.
FILTER_CALLBACK
(int)
Dieser Filter delegiert die Filterung an eine benutzerdefinierte Funktion.
Das Callable wird über den Parameter
options als Wert für den Schlüssel
'options' übergeben.
Der Callback sollte die folgende Signatur haben:
valueDer zu filternde Wert.
Hinweis:
Der Rückgabewert des Callbacks entspricht dem Rückgabewert der aufgerufenen Filterfunktion.
Beispiel #1
Beispiel für die Verwendung von FILTER_CALLBACK zur
Validierung eines Anmeldenamens
<?php
function validate_login(string $value): ?string
{
if (strlen($value) >= 5 && ctype_alnum($value)) {
return $value;
}
return null;
}
$login = "val1dL0gin";
$filtered_login = filter_var($login, FILTER_CALLBACK, ['options' => 'validate_login']);
var_dump($filtered_login);
$login = "f&ke login";
$filtered_login = filter_var($login, FILTER_CALLBACK, ['options' => 'validate_login']);
var_dump($filtered_login);
?>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
string(10) "val1dL0gin" NULL
Dieser Filter ist nicht mit anderen Flags kombinierbar, z. B.
FILTER_NULL_ON_FAILURE.
Note: FILTER_NULL_ON_FAILURE, FILTER_REQUIRE_SCALAR, FILTER_REQUIRE_ARRAY and FILTER_FORCE_ARRAY dont have prefix "FILTER_FLAG_" but they are FLAGS!<?php
+ // Handle FILTER_FLAG_STRIP_BACKTICK
+ // Fixes bug PHP_VERSION < 5.5.24
+ if ($flags & FILTER_FLAG_STRIP_BACKTICK) {
+ $output = str_replace('`', '', $output);
+ }
?>
Revised version:
<?php
function filter_sanitize_string(mixed $value, int $flags = 0): string|false|null {
if ($flags & FILTER_FLAG_EMPTY_STRING_NULL && $value === "") {
return null;
}
if (!(is_scalar($value) || is_null($value))) {
return false;
}
// Strip HTML tags and remove NUL bytes
$value = (string)$value;
$value = strip_tags($value);
$value = str_replace("\0", "", $value);
// High/Low ASCII handling (Byte-by-byte to match legacy behavior)
$output = "";
for ($i = 0, $n = strlen($value); $i < $n; $i++) {
$char = $value[$i];
$ord = ord($char);
if ($ord < 32) {
if ($flags & FILTER_FLAG_STRIP_LOW) continue;
if ($flags & FILTER_FLAG_ENCODE_LOW) {
$output .= "&#$ord;"; // Legacy decimal encoding
continue;
}
}
if ($ord > 127) {
if ($flags & FILTER_FLAG_STRIP_HIGH) continue;
if ($flags & FILTER_FLAG_ENCODE_HIGH) {
$output .= "&#$ord;"; // This turns © into © (©)
continue;
}
}
$output .= $char;
}
// Strip backticks
// Fixes bug PHP_VERSION < 5.5.24
if ($flags & FILTER_FLAG_STRIP_BACKTICK) {
$output = str_replace('`', '', $output);
}
// Legacy ONLY encoded ampersands if FILTER_FLAG_ENCODE_AMP was set
if ($flags & FILTER_FLAG_ENCODE_AMP) {
$output = str_replace('&', '&', $output);
}
// Replicate legacy quote encoding exactly (' and ")
if (!($flags & FILTER_FLAG_NO_ENCODE_QUOTES)) {
$output = str_replace(["'", '"'], [''', '"'], $output);
}
return $output;
}We can add FILTER_FLAG_EMPTY_STRING_NULL:
<?php
- function filter_sanitize_string(mixed $value, int $flags = 0): string|false {
+ function filter_sanitize_string(mixed $value, int $flags = 0): string|false|null {
+ if ($flags & FILTER_FLAG_EMPTY_STRING_NULL && $value === "") {
+ return null;
+ }
?>
For FILTER_FLAG_STRIP_BACKTICK, there is a bug history
(https://bugs.php.net/bug.php?id=69202)
so I did not attempt to code compatility through version history.We're all looking for a polyfill to replace the FILTER_SANITIZE_STRING flag, deprecated as of PHP 8.1.0,
that behaves exactly the same for scalar and non-scalar values.
(Using htmlspecialchars() and strip_tags() are not returning exactly the same output.)
<?php
function filter_sanitize_string(mixed $value, int $flags = 0): string|false {
if (!(is_scalar($value) || is_null($value))) {
return false;
}
// Strip HTML tags and remove NUL bytes
$value = (string)$value;
$value = strip_tags($value);
$value = str_replace("\0", "", $value);
// High/Low ASCII handling (Byte-by-byte to match legacy behavior)
$output = "";
for ($i = 0, $n = strlen($value); $i < $n; $i++) {
$char = $value[$i];
$ord = ord($char);
if ($ord < 32) {
if ($flags & FILTER_FLAG_STRIP_LOW) continue;
if ($flags & FILTER_FLAG_ENCODE_LOW) {
$output .= "&#$ord;"; // Legacy decimal encoding
continue;
}
}
if ($ord > 127) {
if ($flags & FILTER_FLAG_STRIP_HIGH) continue;
if ($flags & FILTER_FLAG_ENCODE_HIGH) {
$output .= "&#$ord;"; // This turns © into © (©)
continue;
}
}
$output .= $char;
}
// Legacy ONLY encoded & if FILTER_FLAG_ENCODE_AMP was set.
if ($flags & FILTER_FLAG_ENCODE_AMP) {
$output = str_replace('&', '&', $output);
}
// Replicate legacy quote encoding exactly (' and ")
if (!($flags & FILTER_FLAG_NO_ENCODE_QUOTES)) {
$output = str_replace(["'", '"'], [''', '"'], $output);
}
return $output;
}
// Tests
$string = "It's a \"test\" \x02 <script> > & ©";
// Deprecated example:
$sanitized = filter_var($string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_HIGH);
var_dump($sanitized);
// Polyfill example:
$sanitized = filter_sanitize_string($string, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_HIGH);
var_dump($sanitized);
// Polyfill in filter_var() callback:
$sanitized = filter_var($string, FILTER_CALLBACK, [
'options' => function($value) {
return filter_sanitize_string($value, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_HIGH);
}
]);
var_dump($sanitized);
?>
Output:
string(44) "It's a "test" > & ©"
string(44) "It's a "test" > & ©"
string(44) "It's a "test" > & ©"