strip_tags()
Функция strip_tags() в PHP удаляет теги HTML и PHP из строки, оставляя только текстовое содержимое.
Введение
Функция strip_tags() в PHP удаляет теги HTML, XML и PHP из строки, оставляя только текстовое содержимое. Она широко используется для преобразования пользовательского или rich-text контента в чистый текст без тегов — например, при создании краткого резюме, тела письма в формате обычного текста или безопасной версии комментария для хранения.
В этой статье рассматриваются синтаксис, обязательные и необязательные параметры, практические примеры, форма массива, добавленная в PHP 7.4, а также важные предупреждения безопасности, которые необходимо учитывать перед использованием функции.
Понимание функции strip_tags()
Функция strip_tags() сканирует входную строку и удаляет всё, что похоже на тег HTML/XML (текст между < и >), а также теги PHP (<?php ... ?>). Текст, находящийся между тегами, сохраняется. Синтаксис выглядит следующим образом:
PHP-синтаксис функции strip_tags()
strip_tags(string $string, array|string|null $allowed_tags = null): stringВот что делает каждый параметр:
$string— входная строка, из которой удаляются теги. Это единственный обязательный параметр.$allowed_tags(необязательный) — список тегов, которые не должны удаляться. Можно передать как строку с именами тегов ("<a><b>") или, начиная с PHP 7.4, как массив (["a", "b"]). При отсутствии (илиnull) удаляются все теги.
Функция возвращает результирующую строку со всеми неразрешёнными тегами. Исходная строка никогда не изменяется.
Важно: комментарии (
<!-- ... -->) и блоки<?php ... ?>всегда удаляются и не могут быть добавлены в список разрешённых.
Пример использования
Рассмотрим пример, чтобы понять применение функции strip_tags() в PHP:
Пример PHP strip_tags()
В приведённом примере мы используем функцию strip_tags() для удаления всех тегов HTML и PHP из строки. Результирующая строка Hello WorldThis is a paragraph. выводится на экран с помощью оператора echo.
Использование параметра $allowable_tags
Рассмотрим ещё один пример, чтобы понять, как параметр $allowable_tags используется вместе с функцией strip_tags():
Как использовать PHP strip_tags()?
В приведённом примере мы используем функцию strip_tags() для удаления тегов HTML и PHP из строки. Мы указываем тег <a> как разрешённый с помощью параметра $allowed_tags. В результате функция удаляет теги <h1> и <p>, сохраняя их текстовое содержимое, а тег <a> вместе с его содержимым остаётся нетронутым. Результирующая строка Hello WorldThis is a paragraph.<a href='https://www.example.com'>Example link</a> выводится на экран с помощью оператора echo.
Передача разрешённых тегов в виде массива (PHP 7.4+)
Начиная с PHP 7.4 разрешённые теги можно передавать в виде массива вместо строки. Это легче читается и менее подвержено ошибкам по сравнению со строкой вида "<a><b>":
<?php
$str = "<p>Hi</p><b>bold</b><i>italic</i>";
// String form (any PHP version)
echo strip_tags($str, "<p><b>"); // <p>Hi</p><b>bold</b>italic
echo "\n";
// Array form (PHP 7.4 and newer) — equivalent result
echo strip_tags($str, ["p", "b"]); // <p>Hi</p><b>bold</b>italicОба вызова сохраняют теги <p> и <b> и удаляют тег <i>, выводя <p>Hi</p><b>bold</b>italic в каждой строке.
Примечание: strip_tags() не валидирует HTML. Функция просто удаляет теги на основе предоставленного списка разрешённых, что может оставить некорректную разметку или незакрытые теги в выводе.
Безопасность: strip_tags() недостаточно для защиты от XSS
Распространённое заблуждение состоит в том, что strip_tags() делает пользовательский ввод безопасным для отображения. Это не так. Функция только удаляет целые теги — она не санирует атрибуты разрешённых тегов:
<?php
$input = '<a href="javascript:alert(1)" onclick="steal()">click me</a>';
// The <a> tag survives, attributes and all
echo strip_tags($input, "<a>");
// <a href="javascript:alert(1)" onclick="steal()">click me</a>Опасные атрибуты href и onclick проходят насквозь. Для вывода, который будет отображаться как HTML, используйте htmlspecialchars() для экранирования текста или специализированный санитайзер HTML, например HTML Purifier, когда нужно безопасно разрешить часть разметки. Применяйте strip_tags() для получения обычного текста, а не безопасного HTML.
Распространённые варианты использования
- Превью в виде обычного текста: создание фрагмента статьи без тегов для результатов поиска или списков.
- Тело письма в формате обычного текста: удаление HTML перед отправкой текстовой альтернативы письма.
- Очистка пользовательского ввода, который не должен содержать разметку, например отображаемое имя или поисковый запрос.
Связанные функции
htmlspecialchars()— экранирует<,>,&и кавычки, чтобы разметка отображалась как текст, а не удалялась.htmlentities()— преобразует все применимые символы в HTML-сущности.trim()— удаляет окружающие пробельные символы, часто используется вместе сstrip_tags()для приведения результата в порядок.
Заключение
Функция strip_tags() — простой инструмент для извлечения обычного текста из строк, содержащих разметку HTML или PHP. Передайте список разрешённых тегов (в виде строки или массива в PHP 7.4+), если нужно сохранить определённые теги, и помните, что функция удаляет только теги, не санируя атрибуты, поэтому она не заменяет правильное экранирование вывода. Используйте её для получения обычного текста, а для безопасного HTML обращайтесь к htmlspecialchars() или полноценному санитайзеру.