Strip tags: примеры (PHP)
strip_tags(string string [, array|string allowed_tags]): stringФункция strip_tags в PHP
Функция strip_tags удаляет HTML и PHP теги из строки. Она часто применяется для очистки пользовательского ввода перед выводом на страницу, что помогает предотвратить XSS-атаки. Также функция используется при подготовке текста для вывода в простом текстовом формате.
Функция принимает два аргумента:
- $string (обязательный) - обрабатываемая строка.
- $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
$text = "<?php echo 'test'; ?> Обычный текст <div>контент</div>";
echo strip_tags($text);
?>Обычный текст контент
Похожие функции в PHP
Функция htmlspecialchars преобразует специальные символы в HTML-сущности, что также защищает от XSS. В отличие от strip_tags, она не удаляет теги, а экранирует их.
В PHP 8.1 и выше FILTER_SANITIZE_STRING устарел. Для очистки строк теперь рекомендуется использовать htmlspecialchars или strip_tags в зависимости от задачи.
Функция 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
$array = ["<p>Первый</p>", "<div>Второй</div>", "Третий без тегов"];
$cleaned = array_map('strip_tags', $array);
print_r($cleaned);
?>Array
(
[0] => Первый
[1] => Второй
[2] => Третий без тегов
)<?php
$text = " <p> Текст с тегами и пробелами </p> ";
$cleaned = trim(strip_tags($text));
echo $cleaned;
?>Текст с тегами и пробелами
<?php
$text = "<h1>Заголовок</h1>\n<p>Абзац с <br> переносом.</p>";
echo strip_tags($text);
?>Заголовок Абзац с переносом.
Функция не удаляет атрибуты из разрешенных тегов, что может быть использовано для сохранения ссылок.
<?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 нет прямой аналогии, но можно использовать пользовательские функции или выполнять обработку на стороне приложения.