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() — мощный инструмент для безопасной работы с пользовательским контентом, позволяющий администратору задавать безопасные теги и атрибуты и фильтровать ненадежные данные.