Як правильно фільтрувати вхідні дані

Для початку пропоную уточнити значення слова фільтрувати, виділивши наступні варіанти обробки даних користувача.
  1. Валідація, тобто перевірка відповідності введених користувачем даних вашої бізнес-логіки.
  2. Фільтрація, тобто перетворення вхідних даних певним чином. Наприклад, ви можете обрізати початкові прогалини в рядку або вирізати з неї html-теги.
  3. Форматування даних для коректної вставки в БД, виведення в HTML і т.д.

Для виконання перших двох пунктів в php є розширення Filter. яке займається перевіркою і очищенням вхідних даних.

Третій пункт говорить, що якщо дані, отримані від користувача, куди-небудь підставляються, то вони повинні бути коректно відформатовані. Причому робити це потрібно безпосередньо в момент підстановки (записи в БД або виведення в html).

При виведенні даних в html (якщо ви явно не допускаєте висновок html-тегів) все спеціальні символи (лапки, знаки більше і менше, амперсанд) повинні бути перетворені в HTML-суті. Цим якраз і займається функція htmlspecialchars. Htmlentities перетворює не тільки ці символи, а й багато інших (точний список можна отримати функцією get_html_translation_table). Якщо ви використовуєте на сайті utf-8, то вона вам взагалі не потрібна.

Тепер про те, на що варто звернути увагу при використанні htmlspecialchars:
  • У третьому параметрі потрібно вказати кодування, яку ви використовуєте на сайті.
  • У другому параметрі варто вказати прапор ENT_QUOTES. щоб перетворювалися як подвійні, так і одинарні лапки. Тому як атрибути можуть бути записані з використанням обох (href = "" і href = ''). В html завжди варто використовувати лапки під час запису атрибутів (не пишіть src = image1.jpg).
  • У другому параметрі ви також можете вказати прапор ENT_SUBSTITUTE (для php> = 5.4). У разі, якщо ваша рядок буде містити некоректно закодовані символи, вони будуть замінені на символ Unicode. Без зазначеного прапора ви отримаєте порожній рядок (подробиці).

Підсумковий варіант використання htmlspecialchars:


Раджу також подивитися документацію до бібліотеки Zend \ Escaper. яка містить приклади коректного і некоректного форматування даних при виведенні в різні частини html-документа.

Ваш відповідь на питання

Увійдіть, щоб написати відповідь

  • Москва
  • Повний робочий день
  • від 40 000 руб.
  • Москва
  • Повний робочий день
  • від 150 000 до 180 000 руб.
  • Москва
  • Повний робочий день
  • від 150 000 до 180 000 руб.

100000 руб. / За проект

30000 руб. / За проект

30000 руб. / За проект

Увійдіть на сайт

Щоб задати питання та отримати на нього кваліфіковану відповідь.

Схожі статті