Создание сайтов - MD².Ru
+7 (999) 919-32-46

Очистка HTML на PHP: Функция для удаления лишних данных и защиты контента

Функция `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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо

Теги: очистка html, php, защита контента, регулярные выражения, XSS-атаки, безопасность, обработка данных, веб-разработка