W3docs

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()

php— editable, runs on the server

В приведённом примере мы используем функцию strip_tags() для удаления всех тегов HTML и PHP из строки. Результирующая строка Hello WorldThis is a paragraph. выводится на экран с помощью оператора echo.

Использование параметра $allowable_tags

Рассмотрим ещё один пример, чтобы понять, как параметр $allowable_tags используется вместе с функцией strip_tags():

Как использовать PHP strip_tags()?

php— editable, runs on the server

В приведённом примере мы используем функцию 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() или полноценному санитайзеру.

Практика

Практика
Какова цель функции strip_tags() в PHP?
Какова цель функции strip_tags() в PHP?
Was this page helpful?