Очистка HTML на PHP: Функция для удаления лишних данных и защиты контента
- 13.10.2024
- md2
- 0 отзывов
Функция `clean_html` на PHP разработана для очистки HTML-кода от ненужных и опасных элементов. Это решение защищает контент от вредоносных данных, удаляет конфиденциальные данные, такие как email-адреса и телефоны, и приводит разметку к единообразному формату для корректного отображения.
Зачем нужна очистка HTML?
При работе с пользовательским контентом или данными из внешних источников можно столкнуться с рисками:
- Инъекции вредоносного кода — например, XSS-атаки.
- Утечка личной информации — адреса электронной почты и номера телефонов.
- Некорректное отображение из-за лишних или ошибочных тегов.
Функция clean_html($html)
поможет минимизировать эти риски и упростит управление HTML-кодом.
Как работает функция clean_html?
function clean_html($html) {
// Исправленное регулярное выражение для удаления адресов электронной почты
$html = preg_replace('/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/', '', $html);
// Удаляем все теги, кроме указанных, и убираем стили у разрешённых тегов
$html = preg_replace_callback(
'/<(?!(\/?(b|i|u|ul|ol|li|p|br)))[^>]*>/i',
function($matches) {
return ''; // Убираем неразрешённые теги
},
$html
);
// Убираем стили у разрешённых тегов
$html = preg_replace('/<(b|i|u|ul|ol|li|p|br)\b[^>]*>/i', '<$1>', $html);
// Заменяем <br> и <br > на <br />
$html = preg_replace('/<br\s*\/?>/i', '<br />', $html);
// Удаляем ссылки
$html = preg_replace('/<a\s+[^>]*href="[^"]*"[^>]*>.*?<\/a>/i', '', $html);
// Убираем ссылки на домены популярных TLD
$html = preg_replace(
'/\b(?:https?:\/\/)?(?:www\.)?([a-zA-Z0-9-]+\.(?:com|ru|net|org|info|biz|co\.uk|io|me|tv))\b/i',
'',
$html
);
// Удаляем пустые <p> внутри списков <ul> и <ol>
$html = preg_replace('/<p[^>]*>\s*<\/p[^>]*>\s*<ul[^>]*>/i', '<ul>', $html);
$html = preg_replace('/<p[^>]*>\s*<\/p[^>]*>\s*<ol[^>]*>/i', '<ol>', $html);
// Удаляем номера телефонов в разных форматах
$html = preg_replace(
'/(?:\+7|8)?[ -]?\(?[0-9]{3}\)?[ -]?[0-9]{3}[ -]?[0-9]{2}[ -]?[0-9]{2}/',
'',
$html
);
// Удаляем пустые <p> без содержимого
$html = preg_replace('/<p[^>]*>\s*<\/p>/', '', $html);
// Заменяем переносы строки на <br />
$html = str_replace(PHP_EOL, '<br />', $html);
// Удаляем дублирующиеся закрывающие теги </p></p>
$html = preg_replace('#</p>\s*</p>#', '</p>', $html);
// Возвращаем очищенный HTML
return $html;
}
Преимущества использования clean_html
- Безопасность: Удаляет потенциально опасные элементы и защищает от XSS-атак.
- Чистая разметка: Удаляет все ненужные теги и атрибуты, оставляя только безопасные элементы.
- Конфиденциальность: Убирает контакты и ссылки, защищая данные пользователей.
- Единый стандарт: Приводит HTML к единому формату, что упрощает поддержку и улучшает совместимость.
Когда использовать функцию clean_html?
Функция будет полезна в следующих случаях:
- Комментарии и формы обратной связи — для фильтрации пользовательского контента.
- Новости и статьи — для очистки данных из внешних источников перед публикацией.
- Динамический контент — при работе с API или приёмом данных из других систем.
Вот пример применения функции clean_html
в контексте обработки данных, получаемых от пользователей через веб-форму. Мы рассмотрим, как использовать эту функцию для очистки HTML-кода перед его сохранением в базу данных.
Пример использования функции clean_html
Предположим, у нас есть форма на сайте, где пользователи могут оставлять комментарии. После отправки формы мы хотим очистить текст комментария от нежелательных элементов, чтобы предотвратить возможные уязвимости и обеспечить безопасность данных.
<?php
// Подключаем файл с функцией clean_html
include 'path/to/your/clean_html.php';
// Проверяем, был ли отправлен комментарий
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// Получаем текст комментария из POST-запроса
$comment = $_POST['comment'];
// Очищаем комментарий с помощью функции clean_html
$cleaned_comment = clean_html($comment);
// Здесь вы можете сохранить очищенный комментарий в базу данных
// Например, с использованием PDO:
try {
$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("INSERT INTO comments (content) VALUES (:content)");
$stmt->bindParam(':content', $cleaned_comment);
$stmt->execute();
echo "Комментарий успешно добавлен!";
} catch (PDOException $e) {
echo "Ошибка: " . $e->getMessage();
}
}
?>
<!-- HTML форма для ввода комментария -->
<form method="post" action="">
<textarea name="comment" rows="5" cols="40" placeholder="Введите ваш комментарий..."></textarea><br>
<input type="submit" value="Отправить">
</form>
Функция clean_html
на PHP — это простой и эффективный способ защиты и стандартизации HTML-кода. Она удаляет лишние данные, сохраняет важные теги и защищает пользователей от потенциальных угроз. Используйте эту функцию для улучшения безопасности и удобства работы с вашим контентом.
Отзывы (0)
Теги: очистка html, php, защита контента, регулярные выражения, XSS-атаки, безопасность, обработка данных, веб-разработка