Strip tags: примеры (PHP)

Функция strip_tags в PHP: полный обзор с примерами
Раздел: Работа со строками
strip_tags(string string [, array|string allowed_tags]): string

Функция strip_tags в PHP

Назначение и использование

Функция strip_tags удаляет HTML и PHP теги из строки. Она часто применяется для очистки пользовательского ввода перед выводом на страницу, что помогает предотвратить XSS-атаки. Также функция используется при подготовке текста для вывода в простом текстовом формате.

Аргументы функции

Функция принимает два аргумента:

  1. $string (обязательный) - обрабатываемая строка.
  2. $allowed_tags (необязательный) - строка, содержащая список разрешенных тегов. Теги указываются в формате <tag1><tag2>.

Примеры использования strip_tags

Базовое удаление всех тегов
<?php
$text = "<p>Пример <b>текста</b> с тегами.</p>";
echo strip_tags($text);
?>
Пример текста с тегами.
Сохранение определенных тегов
<?php
$text = "<p>Абзац <a href='#'>ссылка</a> и <b>жирный</b> текст.</p>";
echo strip_tags($text, '<a><b>');
?>
Абзац ссылка и жирный текст.
Обработка строки с PHP тегами
<?php
$text = "<?php echo 'test'; ?> Обычный текст <div>контент</div>";
echo strip_tags($text);
?>
 Обычный текст контент

Похожие функции в PHP

htmlspecialchars

Функция htmlspecialchars преобразует специальные символы в HTML-сущности, что также защищает от XSS. В отличие от strip_tags, она не удаляет теги, а экранирует их.

filter_var с FILTER_SANITIZE_STRING

В PHP 8.1 и выше FILTER_SANITIZE_STRING устарел. Для очистки строк теперь рекомендуется использовать htmlspecialchars или strip_tags в зависимости от задачи.

htmlentities

Функция htmlentities преобразует все символы, которые имеют HTML-сущности. Она более агрессивна, чем htmlspecialchars, и используется реже.

Типичные ошибки

Неправильное указание разрешенных тегов

При указании разрешенных тегов необходимо указывать их в правильном формате, иначе они не будут распознаны.

<?php
$text = "<p>Текст <span>внутри</span></p>";
// Ошибка: теги указаны без угловых скобок
echo strip_tags($text, 'p span');
?>
Текст внутри
Попытка удалить теги из уже очищенной строки

Повторное применение функции к строке без тегов не приводит к ошибке, но является избыточным.

<?php
$text = "Простой текст";
echo strip_tags($text); // Лишний вызов
?>
Простой текст
Игнорирование вложенных тегов

Функция не обрабатывает вложенность тегов, а просто удаляет их. Это может привести к неожиданному результату.

<?php
$text = "<script>alert('test');</script>";
echo strip_tags($text); // Удалит тег script
?>
alert('test');

Изменения в PHP 8

В PHP 8 функция strip_tags не претерпела значительных изменений. Однако, в более ранних версиях PHP были устаревшие параметры, которые теперь удалены. Важно отметить, что в PHP 8 повышена производительность работы функции.

Удаление устаревших параметров

В версиях до PHP 7.4 существовал недокументированный параметр, который больше не поддерживается.

Расширенные примеры

Очистка массива строк
Пример php
<?php
$array = ["<p>Первый</p>", "<div>Второй</div>", "Третий без тегов"];
$cleaned = array_map('strip_tags', $array);
print_r($cleaned);
?>
Array
(
    [0] => Первый
    [1] => Второй
    [2] => Третий без тегов
)
Комбинирование с другими функциями
Пример php
<?php
$text = "   <p>  Текст с тегами и пробелами   </p>   ";
$cleaned = trim(strip_tags($text));
echo $cleaned;
?>
Текст с тегами и пробелами
Обработка многострочного текста
Пример php
<?php
$text = "<h1>Заголовок</h1>\n<p>Абзац с <br> переносом.</p>";
echo strip_tags($text);
?>
Заголовок
Абзац с  переносом.
Сохранение атрибутов в разрешенных тегах

Функция не удаляет атрибуты из разрешенных тегов, что может быть использовано для сохранения ссылок.

Пример php
<?php
$text = "<a href=\"https://example.com\" title=\"Пример\">Ссылка</a>";
echo strip_tags($text, '<a>');
?>
Ссылка

Аналоги функции в других языках

Strip tags в Python

В Python используется функция BeautifulSoup.get_text() или модуль html с методом unescape.

from bs4 import BeautifulSoup
html = "<p>Пример <b>текста</b></p>"
soup = BeautifulSoup(html, 'html.parser')
text = soup.get_text()
print(text)
Пример текста

Strip tags в Javascript

В JavaScript для удаления тегов можно использовать свойство textContent или создать временный элемент DOM.

const html = "<p>Пример <b>текста</b></p>";
const div = document.createElement('div');
div.innerHTML = html;
const text = div.textContent;
console.log(text);
Пример текста

Strip tags в MySQL

В MySQL нет прямой аналогии, но можно использовать пользовательские функции или выполнять обработку на стороне приложения.

PHP strip_tags function comments

En
Strip tags Strip HTML and PHP tags from a string