wp_filter_nohtml_kses()
— это функция в WordPress, которая удаляет все HTML-теги и атрибуты из строки, оставляя только текст. Это полезно при обработке данных, полученных от пользователей, чтобы удалить потенциально опасный HTML-код и оставить только безопасное текстовое содержимое.
wp_filter_nohtml_kses( string $data ): string
Функция wp_filter_nohtml_kses()
обрабатывает данные, предварительно экранированные слэшами, и удаляет все HTML-теги и атрибуты. Если передать не экранированную строку, функция сначала экранирует специальные символы, а затем удаляет HTML, возвращая уже экранированный результат.
Параметры
- $data (строка) — обязательный параметр, содержащий текст, из которого нужно удалить HTML-теги.
Возвращаемое значение
Возвращает очищенную строку без HTML-тегов, сохраняя только текст.
Пример 1: Удаление HTML-тегов из строки с элементами форматирования
Рассмотрим, как wp_filter_nohtml_kses()
удаляет теги <h2>
, <div>
, и <span>
из строки, оставляя только текстовое содержимое:
$data = '<div><h2>Заголовок с HTML-тегами</h2><span>Текстовый контент с <a href="#">ссылкой</a></span></div>';
$filtered_data = wp_filter_nohtml_kses( $data );
echo htmlspecialchars( $filtered_data );
Результат:
Заголовок с HTML-тегами
Текстовый контент с ссылкой
Функция удаляет все HTML-теги и сохраняет только текст.
Пример 2: Использование экранированных данных
Если передать строку с экранированными слэшами, функция корректно удаляет HTML, сохраняя при этом специальные символы. Используем wp_slash()
для подготовки строки перед фильтрацией:
$data = wp_slash('<div><p>Экранированный "текст" в HTML.</p><span>Пример текста с кавычками "</span></div>');
$filtered_data = wp_filter_nohtml_kses( $data );
echo htmlspecialchars( $filtered_data );
Результат:
Экранированный \"текст\" в HTML.
Пример текста с кавычками \"
Теги <div>
, <p>
, <span>
удаляются, экранированные кавычки сохраняются.
Пример 3: Очистка пользовательского ввода с многоуровневыми HTML-структурами
Функция wp_filter_nohtml_kses()
может очистить даже сложные HTML-структуры. Рассмотрим пример, где пользовательский ввод содержит различные уровни вложенности:
$data = '<section><div><h3>Заголовок</h3><p>Текстовый блок с <strong>выделением</strong> и <em>курсивом</em>.</p></div></section>';
$filtered_data = wp_filter_nohtml_kses( $data );
echo htmlspecialchars( $filtered_data );
Результат:
Заголовок
Текстовый блок с выделением и курсивом.
В этом примере теги <section>
, <div>
, <h3>
, <p>
, <strong>
, и <em>
удаляются, сохраняя только текстовый контент.
Особенности использования wp_filter_nohtml_kses()
- Ожидание экранированных данных — если передается строка без экранирования, функция автоматически добавляет экранирующие символы для защиты данных.
- Удаление всех HTML-тегов — функция эффективно удаляет любые HTML-теги, оставляя только текст, что делает ее полезной для очистки данных от HTML и XSS-угроз.
- Безопасность при работе с пользовательскими данными — позволяет избежать потенциально вредоносного HTML-кода в пользовательском контенте.
Заключение
Функция wp_filter_nohtml_kses()
— это надежный инструмент для удаления HTML-кода из текстовых данных, обеспечивающий безопасность пользовательского ввода в WordPress.