Форматирование текста: Как написать PHP-функцию clean($variable), которая обрезает пробелы и нейтрализует XSS-символы во входящих данных?
Защита входящих данных — одна из ключевых задач при разработке веб-приложений на PHP. Функция clean($variable) позволяет одновременно решить две задачи: убрать лишние пробелы по краям строки и нейтрализовать потенциально опасные XSS-символы (например, угловые скобки, кавычки и амперсанды).
## Базовая реализация функции clean()
php
function clean($variable) {
// Шаг 1: Приводим к строке на случай нестроковых типов
$variable = (string) $variable;
// Шаг 2: Обрезаем пробелы с обоих концов строки
$variable = trim($variable);
// Шаг 3: Нейтрализуем XSS-символы
$variable = htmlspecialchars($variable, ENT_QUOTES | ENT_HTML5, ‘UTF-8’);
return $variable;
}
## Что делает каждый шаг?
**trim()** — стандартная функция PHP, которая удаляет пробелы, табуляции, переносы строк и другие пробельные символы с начала и конца строки. Это предотвращает ситуации, когда пользователь случайно (или намеренно) вводит строку вида « admin ».
**htmlspecialchars()** — преобразует специальные HTML-символы в их безопасные HTML-сущности:
— « → `>`
— `»` → `"`
— `’` → `'`
— `&` → `&`
Флаг **ENT_QUOTES** обеспечивает экранирование как двойных, так и одинарных кавычек. Флаг **ENT_HTML5** указывает на использование правил HTML5. Третий параметр `’UTF-8’` задаёт кодировку, что критично для корректной обработки кириллицы и других многобайтовых символов.
## Расширенная версия с дополнительной защитой
php
function clean($variable) {
if (is_array($variable)) {
return array_map(‘clean’, $variable);
}
$variable = (string) $variable;
$variable = trim($variable);
$variable = strip_tags($variable); // Удаляем HTML-теги полностью
$variable = htmlspecialchars($variable, ENT_QUOTES | ENT_HTML5, ‘UTF-8’);
return $variable;
}
Здесь добавлена рекурсивная обработка массивов и вызов **strip_tags()**, который полностью удаляет HTML и PHP-теги перед экранированием.
## Важные замечания
— Функцию следует применять **при выводе данных**, а не при записи в базу данных. Для БД используйте подготовленные запросы (PDO/MySQLi).
— Не используйте clean() для паролей — htmlspecialchars изменит строку и хеш не совпадёт.
— Для обработки URL дополнительно применяйте `filter_var($url, FILTER_SANITIZE_URL)`.
— В современных фреймворках (Laravel, Symfony) подобная очистка встроена в шаблонизаторы (Blade, Twig).
Правильное использование функции clean() — первый рубеж защиты от XSS-атак в PHP-приложениях.
