Что делают htmlentities с ENT_QUOTES и UTF-8?

Я всегда использовал простой htmlentities($_POST['string']); очистить данные для любых атак XSS. Недавно я видел, как люди используют это:

htmlentities($_POST['string'], ENT_QUOTES, 'UTF-8');

В чем преимущество или цель использования этого по сравнению с просто htmlentities(),

Также не знаю, уместно ли это, но я использую мета UTF-8 всегда вверху своих страниц.

1 ответ

Решение

ENT_QUOTES необходим, если данные подставляются в атрибут HTML, например

echo '<input type="text" value="' . htmlentities($string, ENT_QUOTES) . '">";

Это гарантирует, что кавычки закодированы, поэтому они не завершают value="..." атрибут преждевременно.

UTF-8 необходимо, если ваша страница использует кодировку UTF-8, поскольку по умолчанию используется кодировка ISO-8859-1. Эти кодировки должны совпадать, иначе пользователь увидит странные символы.

Причина, по которой люди указывают кодировку символов и кавычки, заключается в том, что

  the encapsulation characters ' and " are encoded (ENT_QUOTES) 

and 'UTF-8' encoding flag expressed as:
   htmlentities($_POST['string'], ENT_QUOTES, $encoding="UTF-8");
or
  htmlentities($_POST['string'], ENT_QUOTES, "UTF-8");

во всем заявлении.

Основная причина для выражения кодировки символов в фильтре - поддерживать ссылку на кадр входных данных. Если кодировка передачи изменилась из-за помех передачи или злонамеренного изменения пакета передачи, фильтр заполняет недостающие данные нулями.

Другие вопросы по тегам