Was macht FILTER_SANITIZE_STRING?
Es ist wie ein Millionen-Q&A, die erklären, die Optionen wie FILTER_FLAG_STRIP_LOW
aber was tut FILTER_SANITIZE_STRING
tun, auf seine eigene, ohne irgendwelche Optionen? Sie tut nur filter-tags?
InformationsquelleAutor der Frage | 2014-04-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut PHP-Handbuch:
Laut W3Schools:
Nun, das sagt uns nicht viel. Lasst uns sehen, einige PHP-Quellen.
ext/filter/filter.c
:Nun, lasst uns sehen, wie
php_filter_string
definiert ist.ext/filter/sanitizing_filters.c
:Spare ich mir zu kommentieren-flags, da Sie bereits erklärt, auf das Internet, wie Sie sagte, und konzentrieren sich auf das, was immer durchgeführt, statt, die ist nicht so gut dokumentiert.
Erste -
php_filter_strip
. Es tut nicht viel, nur dauert die flags, die man der Funktion übergibt, und verarbeitet Sie entsprechend. Es tut gut dokumentierte Sachen.Dann konstruieren wir eine Art Karte und rufen
php_filter_encode_html
. Es ist interessanter: er konvertiert Sachen wie"
'
&
und Zeichen mit Ihren ASCII-codes kleiner als 32 und höher als " 127 " ist in HTML-Entitäten, so&
in Ihrem string wird&
. Wieder, es verwendet die flags für dieses.Dann bekommen wir rufen zu
php_strip_tags_ex
die nur Streifen HTML -, XML-und PHP-tags (nach seiner definition in/ext/standard/string.c
) und NULL-bytes entfernt, wie der Kommentar sagt.Code, der folgt, ist es für die interne string-management und nicht wirklich tun, keine Bereinigung. Nun, nicht ganz - vorbei an nicht dokumentierten flag
FILTER_FLAG_EMPTY_STRING_NULL
zurückNULL
wenn die sanitized-string leer ist, anstatt einfach nur einen leeren string, aber es ist nicht wirklich viel nützliches. Ein Beispiel:→
Gibt es nicht viel mehr Los ist, also das Handbuch war ziemlich korrekt - um es zusammenzufassen:
FILTER_FLAG_NO_ENCODE_QUOTES
- Dieses flag nicht codieren Zitate.FILTER_FLAG_STRIP_LOW
- Strip-Zeichen mit ASCII-Wert unter 32.FILTER_FLAG_STRIP_HIGH
- Strip-Zeichen mit ASCII-Wert über 127 ist.FILTER_FLAG_ENCODE_LOW
- Kodieren von Zeichen mit ASCII-Wert unter 32.FILTER_FLAG_ENCODE_HIGH
- Kodieren von Zeichen mit ASCII-Wert über 127 ist.FILTER_FLAG_ENCODE_AMP
- Kodieren, das & Zeichen zu&
(nicht&
).FILTER_FLAG_EMPTY_STRING_NULL
- ZurückNULL
anstatt eines leeren strings.InformationsquelleAutor der Antwort rr-
Ich war mir nicht sicher, ob "stripping " tags" bedeutet, dass nur die
<
>
Zeichen, und wenn es bewahrt die Inhalte zwischen den tags, z.B. den string "Hallo!" aus<b>Hello!</b>
so dass ich beschloss zu prüfen. Hier sind die Ergebnisse, die mit Hilfe von PHP 7.1.5 (und Bash-Kommandozeile):<?php echo filter_input(INPUT_POST,'my-input', FILTER_SANITIZE_STRING);
1. ASCII b/n 32 and 127: ABC abc 012 2. ASCII higher than 127: Çüé 3. PHP tag: 4. HTML tag: var i = 0; 5. Ampersand: & 6. Backtick: ` 7. Double quote: " 8. Single quote: '
<?php echo filter_input(INPUT_POST,'my-input', FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);
1. ASCII b/n 32 and 127: ABC abc 012 2. ASCII higher than 127: Çüé 3. PHP tag: 4. HTML tag: var i = 0; 5. Ampersand: & 6. Backtick: ` 7. Double quote: " 8. Single quote: '
<?php echo filter_input(INPUT_POST,'my-input', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
1. ASCII b/n 32 and 127: ABC abc 012 2. ASCII higher than 127: 3. PHP tag: 4. HTML tag: var i = 0; 5. Ampersand: & 6. Backtick: ` 7. Double quote: " 8. Single quote: '
<?php echo filter_input(INPUT_POST,'my-input', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_BACKTICK);
1. ASCII b/n 32 and 127: ABC abc 012 2. ASCII higher than 127: Çüé 3. PHP tag: 4. HTML tag: var i = 0; 5. Ampersand: & 6. Backtick: 7. Double quote: " 8. Single quote: '
<?php echo filter_input(INPUT_POST,'my-input', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH);
1. ASCII b/n 32 and 127: ABC abc 012 2. ASCII higher than 127: Çüé 3. PHP tag: 4. HTML tag: var i = 0; 5. Ampersand: & 6. Backtick: ` 7. Double quote: " 8. Single quote: '
<?php echo filter_input(INPUT_POST,'my-input', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_AMP);
1. ASCII b/n 32 and 127: ABC abc 012 2. ASCII higher than 127: Çüé 3. PHP tag: 4. HTML tag: var i = 0; 5. Ampersand: & 6. Backtick: ` 7. Double quote: " 8. Single quote: '
Auch, für die Fahnen FILTER_FLAG_STRIP_LOW & FILTER_FLAG_ENCODE_LOW, da mein Bash nicht diese Zeichen anzuzeigen, überprüfte ich mit dem bell-Zeichen (ASCII-007) und Restman Chrome-Erweiterung:

InformationsquelleAutor der Antwort Jan Żankowski