FILTER_SANITIZE_STRING лишает символ <<> и любой текст после него

У меня есть странная проблема при использовании FILTER_SANITIZE_STRING для переменной (заполненной человеком). Кажется, он лишает символ <<<<<<<<<< < >> и любой текст, который после этого. Символ > остается нетронутым.

Я полагаю, он считает, что < является тегом HTML, который нужно удалить, но за ним нет закрывающего тега, поэтому я не знаю, почему он будет вести себя так. Есть ли способ заставить его оставить < на месте и все еще дезинфицировать то, как он должен?

Solutions Collecting From Web of "FILTER_SANITIZE_STRING лишает символ <<> и любой текст после него"

Корневая проблема заключается в том, что когда вы используете FILTER_SANITIZE_STRING чтобы FILTER_SANITIZE_STRING теги HTML, вы обрабатываете свой ввод как HTML. Согласно вашему описанию, ваш ввод представляет собой простой текст. Таким образом, фильтр может только повредить входные данные, как уже сообщали пользователи.

Хотя это, по-видимому, довольно популярный метод, я никогда не понимал концепцию чередования тэгов HTML в текстовом виде как метод санитизации. Если это не HTML, вам не нужно заботиться о тегах HTML, по той же причине, что вам не нужно заботиться о ключевых словах SQL или командах командной строки. Это ничего, кроме данных.

Но, конечно, когда вы вставляете свою строку в HTML, вам нужно убежать от нее, чтобы:

  1. Ваши данные отображаются как есть
  2. Результат по-прежнему действителен HTML

Вот почему существует htmlspecialchars () . Аналогично, вам необходимо использовать соответствующий механизм эвакуации, когда вы динамически генерируете любой другой код: SQL, JavaScript, JSON …