0

Что делает FILTER_SANITIZE_STRING?

20

У меня вопрос по поводу функции FILTER_SANITIZE_STRING в PHP. Я нашел множество вопросов и ответов, которые объясняют параметры, например, FILTER_FLAG_STRIP_LOW, но меня интересует, что именно делает FILTER_SANITIZE_STRING без каких-либо параметров? Просто удаляет теги? Спасибо!

1 ответ(ов)

0

Вопрос о том, что именно означает "удаление тегов" (stripping tags) и сохраняет ли это содержимое между тегами, можно проиллюстрировать на примере проверки с использованием PHP 7.1.5 и Bash. Ниже представлены результаты:

curl --data-urlencode 'my-input='\
'1. ASCII b/n 32 and 127: ABC abc 012 '\
'2. ASCII higher than 127: Çüé '\
'3. PHP tag: <?php $i = 0; ?> '\
'4. HTML tag: <script type="text/javascript">var i = 0;</script> '\
'5. Ampersand: & '\
'6. Backtick: ` '\
'7. Double quote: " '\
'8. Single quote: '"'" \
http://localhost/sanitize.php

Результаты для различных флагов фильтрации FILTER_SANITIZE_STRING:

  1. Без каких-либо флагов:

    <?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: '`
  2. С флагом FILTER_FLAG_NO_ENCODE_QUOTES:

    <?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: '`
  3. С флагом FILTER_FLAG_STRIP_HIGH:

    <?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: '`
  4. С флагом FILTER_FLAG_STRIP_BACKTICK:

    <?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: &#34; 8. Single quote: &#39;
  5. С флагом FILTER_FLAG_ENCODE_HIGH:

    <?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: &#195;&#135;&#195;&#188;&#195;&#169; 3. PHP tag: 4. HTML tag: var i = 0; 5. Ampersand: & 6. Backtick: 7. Double quote: " 8. Single quote: '`
  6. С флагом FILTER_FLAG_ENCODE_AMP:

    <?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: &#38; 6. Backtick: 7. Double quote: " 8. Single quote: '`

Что касается флагов FILTER_FLAG_STRIP_LOW и FILTER_FLAG_ENCODE_LOW, была проведена проверка с использованием управляющего символа (bell character, ASCII 007):

  • Без этих флагов символ сохраняется.
  • С FILTER_FLAG_STRIP_LOW символ удаляется.
  • С FILTER_FLAG_ENCODE_LOW символ кодируется как &#7;.

Таким образом, "удаление тегов" в данном контексте подразумевает не только удаление самих тегов <...>, но и влияет на обработку символов и других элементов в строке.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь