У меня есть странная проблема при использовании FILTER_SANITIZE_STRING
для переменной (заполненной человеком). Кажется, он лишает символ <<<<<<<<<< <
>> и любой текст, который после этого. Символ >
остается нетронутым.
Я полагаю, он считает, что <
является тегом HTML, который нужно удалить, но за ним нет закрывающего тега, поэтому я не знаю, почему он будет вести себя так. Есть ли способ заставить его оставить <
на месте и все еще дезинфицировать то, как он должен?
Корневая проблема заключается в том, что когда вы используете FILTER_SANITIZE_STRING
чтобы FILTER_SANITIZE_STRING
теги HTML, вы обрабатываете свой ввод как HTML. Согласно вашему описанию, ваш ввод представляет собой простой текст. Таким образом, фильтр может только повредить входные данные, как уже сообщали пользователи.
Хотя это, по-видимому, довольно популярный метод, я никогда не понимал концепцию чередования тэгов HTML в текстовом виде как метод санитизации. Если это не HTML, вам не нужно заботиться о тегах HTML, по той же причине, что вам не нужно заботиться о ключевых словах SQL или командах командной строки. Это ничего, кроме данных.
Но, конечно, когда вы вставляете свою строку в HTML, вам нужно убежать от нее, чтобы:
Вот почему существует htmlspecialchars () . Аналогично, вам необходимо использовать соответствующий механизм эвакуации, когда вы динамически генерируете любой другой код: SQL, JavaScript, JSON …