wp_filter_post_kses()
очищает контент, сохраняя только те теги, которые считаются безопасными, и автоматически добавляет экранирующие слэши. Это полезно для удаления нежелательных тегов и атрибутов в постах, сохраняя при этом нужное форматирование, особенно при обработке пользовательского контента.
Функция удаляет слэши из переданного текста, фильтрует его, а затем добавляет слэши обратно, чтобы подготовить данные для сохранения в базе данных.
wp_filter_post_kses( string $data ): string
Параметры
- $data (строка) — требуемый параметр. Содержит текст, который нужно отфильтровать, с экранированными слэшами.
Возвращаемое значение
Возвращает отфильтрованную строку, содержащую только допустимые HTML-теги и атрибуты, с сохранением экранирующих слэшей.
Пример 1: Фильтрация простого текста с разными HTML-тегами
Рассмотрим, как wp_filter_post_kses()
удаляет небезопасные теги, такие как <script>
, но сохраняет разрешенные:
$data = '<p>Тестовый текст с <span style="color: red;">красным</span> выделением, <div>и div элементом.</div> <script>alert("Скрипт!")</script> <a href="#">Ссылка</a>.</p>';
$filtered_data = wp_filter_post_kses( $data );
echo htmlspecialchars( $filtered_data );
Результат:
<p>Тестовый текст с <span style="color: red;">красным</span> выделением, div элементом. Ссылка.</p>
В этом примере <script>
был удален, <a>
был сохранен, а все разрешенные теги и атрибуты остались.
Пример 2: Удаление нестандартных атрибутов
Функция также удаляет любые неразрешенные атрибуты из тега. В следующем примере атрибут data-id
будет удален, так как он не включен в разрешенные:
$data = '<p data-id="123">Пример с атрибутом data-id</p> <strong>Текст в теге strong</strong>';
$filtered_data = wp_filter_post_kses( $data );
echo htmlspecialchars( $filtered_data );
Результат:
<p>Пример с атрибутом data-id</p> <strong>Текст в теге strong</strong>
В данном случае атрибут data-id
удален, а текст в разрешенных тегах <p>
и <strong>
остается.
Пример 3: Фильтрация текста с элементами списка
Для более сложных элементов форматирования, таких как списки, wp_filter_post_kses()
оставляет базовые HTML-теги для создания упорядоченных и неупорядоченных списков:
$data = '<ul><li>Пункт 1</li><li>Пункт 2</li></ul><p>Этот текст допустим, а <style>стиль</style> не будет сохранен.</p>';
$filtered_data = wp_filter_post_kses( $data );
echo htmlspecialchars( $filtered_data );
Результат:
<ul><li>Пункт 1</li><li>Пункт 2</li></ul><p>Этот текст допустим, а стиль не будет сохранен.</p>
Тег <style>
удаляется, но <ul>
, <li>
, <p>
остаются.
Особенности работы с wp_filter_post_kses()
- Глобальная переменная
$allowedposttags
— определяет, какие HTML-теги и атрибуты разрешены для содержимого постов. Если необходимо изменить набор разрешенных тегов, используйте фильтры. - Автоматическое добавление слэшей — поскольку функция ожидает экранированные слэши, перед очисткой данных из формы (например,
$_POST
), следует использоватьwp_unslash()
. - Контроль безопасности — в отличие от
wp_kses()
, эта функция специально настроена для фильтрации контента постов, помогая избежать XSS-уязвимостей.
Заключение
Функция wp_filter_post_kses()
— мощный инструмент для безопасной работы с пользовательским контентом, позволяющий администратору задавать безопасные теги и атрибуты и фильтровать ненадежные данные.