Как убрать html теги из текста
Дата публикации: 2016-01-29
От автора: допустим, у вас есть кусок кода с каким-то содержимым, а вам нужно получить из него только текст. Вручную удалять все теги может быть очень долго и нудно, поэтому давайте разбираться, как с помощью php убрать html теги.
Если вам надо убрать из текста html-теги, то вам может пригодиться одна php-функция, которая хорошо справляется с этим заданием. Что она делает? Мы ей передаем нужную строку с кодом, а она вырезает оттуда все html и php-команды, возвращая содержимое без кода. Это функция strip_tags, которая имеет один обязательный и один необязательный параметры.
Соответственно, давайте сразу же протестируем ее работу.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Это текст в абзаце
На экран выведется фраза “Это текст в абзаце”. Соответственно, вторым параметром можно задать те теги, которые не нужно удалять.
Это слова в пустом строчном спане
В этой случае мы запретили функции удалять тег span и на экран он выведется вместе с текстом. Я думаю, основная цель strip_tags вам понятна. Если в коде присутствуют комментарии, то они тоже будут удалены. Но что, если удалить теги надо из целого файла? Для этого есть другая команда, которую рассмотрим далее.
Как убрать html теги из текста с помощью fgetss()
Эта команда отличается от предыдущей тем, что позволяет убрать html теги из всего файла. Для этого его предварительно необходимо открыть с помощью fopen(), в которой указывается путь до файла и режим, котором будет работа с ним.
Сама функция fgetss содержит три параметра. Первым является указатель на файл, с которого надо убирать лишнее. Второй параметр – длина получаемых данных, можно увидеть в блокноте или любом текстовом редакторе. Записывается в виде числового значения. Третий и необязательный параметр – разрешенные теги, которые не будут удалены. Этот параметр записывается также, как и для функции strip_tags.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Что мы в данном случае сделали:
Открыли файл “file.php”, сделав его доступным для чтения
Метод feof() проверяет, достигнут ли конец файла
По нашему условию, если конец файла достигнут, то с помощью функции fgetss() обрабатываем файл и выводим на экран всю информацию в новой переменной.
После этого файл закрывается. Пользоваться функцией есть смысл, когда необходимо удалить теги из файла, где их может быть сотни.
Убираем html-теги с помощью онлайн сервиса
Возможно, у вас нет желания пользоваться возможностями php для очищения текста от ненужных элементов. Что ж, есть способ гораздо более простой. Это онлайн сервис 0en.ru, который может удалять html дескрипторы и комментарии из скопированного в поле текста. С его помощью можно получить чистый текст уже через несколько секунд.
Единственный минус веб-сервиса в том, что он удаляет абсолютно все, поэтому если вы хотите какие-то из них оставить, то лучше все-таки воспользоваться одной из функций PHP.
Замена символов
Ну а что, если вам нужно удалить всего лишь 1-2 тега на странице. Сделать это еще проще. В любом нормальном текстовом редакторе есть функция “найти и заменить”. В первое поле вы вписываете символы, которые нужно найти (нужный нам открывающий тег), а во второе – на что его заменить. Здесь просто оставляем пустое место. Клац, и все удалилось. Соответственно, если тег парный, то нужно не забыть удалить и его закрывающую часть.
Сегодня мы с вами узнали несколько способов удаления html тегов из текста. Используйте если надо и читайте наш блог, чтобы узнавать еще больше о веб-технологиях.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
strip_tags
(PHP 4, PHP 5, PHP 7, PHP 8)
strip_tags — Удаляет теги HTML и PHP из строки
Описание
Список параметров
Второй необязательный параметр может быть использован для указания тегов, которые не нужно удалять. Они указываются как строка ( string ) или как массив ( array ) с PHP 7.4.0. Смотрите пример ниже относительно формата этого параметра.
Возвращаемые значения
Возвращает строку без тегов.
Список изменений
| Версия | Описание |
|---|---|
| 8.0.0 | allowed_tags теперь допускает значение null. |
| 7.4.0 | allowed_tags теперь альтернативно принимает массив ( array ). |
Примеры
Пример #1 Пример использования strip_tags()
// Начиная с PHP 7.4.0, строка выше может быть записана как:
// echo strip_tags($text, [‘p’, ‘a’]);
?>
Результат выполнения данного примера:
Примечания
Эта функция не должна использоваться для предотвращения XSS-атак. Используйте более подходящие функции для этой задачи, такие как htmlspecialchars() или другие механизмы, в зависимости от контекста вывода.
Из-за того, что strip_tags() не проверяет валидность HTML, то частичные или сломанные теги могут послужить удалением большего количества текста или данных, чем ожидалось.
Смотрите также
User Contributed Notes 17 notes
Hi. I made a function that removes the HTML tags along with their contents:
Result for strip_tags($text):
sample text with tags
Result for strip_tags_content($text):
text with
Result for strip_tags_content($text, ‘‘):
sample text with
Result for strip_tags_content($text, ‘‘, TRUE);
text with
I hope that someone is useful 🙂
After upgrading from v7.3.3 to v7.3.7 it appears nested «php tags» inside a string are no longer being stripped correctly by strip_tags().
This is still working in v7.3.3, v7.2 & v7.1. I’ve added a simple test below.
A word of caution. strip_tags() can actually be used for input validation as long as you remove ANY tag. As soon as you accept a single tag (2nd parameter), you are opening up a security hole such as this:
Plus: regexing away attributes or code block is really not the right solution. For effective input validation when using strip_tags() with even a single tag accepted, http://htmlpurifier.org/ is the way to go.
Since strip_tags does not remove attributes and thus creates a potential XSS security hole, here is a small function I wrote to allow only specific tags with specific attributes and strip all other tags and attributes.
If you only allow formatting tags such as b, i, and p, and styling attributes such as class, id and style, this will strip all javascript including event triggers in formatting tags.
Note that allowing anchor tags or href attributes opens another potential security hole that this solution won’t protect against. You’ll need more comprehensive protection if you plan to allow links in your text.
a HTML code like this:
$str = ‘color is bluesize is huge
material is wood’;
$str = ‘color is blue size is huge material is wood’;
«5.3.4 strip_tags() no longer strips self-closing XHTML tags unless the self-closing XHTML tag is also given in allowable_tags.»
This is poorly worded.
The above seems to be saying that, since 5.3.4, if you don’t specify «
» in allowable_tags then «
» will not be stripped. but that’s not actually what they’re trying to say.
What it means is, in versions prior to 5.3.4, it «strips self-closing XHTML tags unless the self-closing XHTML tag is also given in allowable_tags», and that since 5.3.4 this is no longer the case.
So what reads as «no longer strips self-closing tags (unless the self-closing XHTML tag is also given in allowable_tags)» is actually saying «no longer (strips self-closing tags unless the self-closing XHTML tag is also given in allowable_tags)».
pre-5.3.4: strip_tags(‘Hello World
‘,’
‘) => ‘Hello World
‘ // strips
because it wasn’t explicitly specified in allowable_tags
5.3.4 and later: strip_tags(‘Hello World
‘ // does not strip
because PHP matches it with
in allowable_tags
Note the different outputs from different versions of the same tag:
Features:
* allowable tags (as in strip_tags),
* optional stripping attributes of the allowable tags,
* optional comment preserving,
* deleting broken and unclosed tags and comments,
* optional callback function call for every piece processed allowing for flexible replacements.
Caution: the function doesn’t fully validate tags (the more so HTML itself), it just force strips those obviously broken (in addition to stripping forbidden tags). If you want to get valid tags then use strip_attrs option, though it doesn’t guarantee tags are balanced or used in the appropriate context. For complex logic consider using DOM parser.
Here is a recursive function for strip_tags like the one showed in the stripslashes manual page.
Как в php удалить из строки определенные теги? Функция strip_tags удалет все кроме определенных. А мне нужно только определенные. Как это сделать?
Здравствуйте. Собственно, сабж.
Решил вопрос вот так:
Вроде все работает.
Валидных HTML тегов – конечное множество. Их все можно перечислить. Исключить «определенные».
На деле допустимых HTML тегов больше, строка будет длиннее, но «белый список» вполне рабочее решение вашей задачи, раз не хотите возиться с регулярками.
Adamos, А напуркуа вам рекурсия?
Вы теги удаляете. Какая разница, вложены они или нет?
strip_tags тоже рекурсию не поддерживает, а тупо удаляет то, что подходит под определения тегов.
Вы слышали про слово «целесообразность»?
Вы описываете задачу по удалению какого-то ограниченного набора тегов (не содержимого документа в конкретных тегах, не элементов объектной модели).
Можете свой браузер написать, распарсить в нем html, отрендерить, написать ИИ, который будет анализировать отрендеренное изображение и распознавать текст и формировать новый документ, но уже без не нужных вам тегов. Только зачем?
Как удалить все HTML-теги регулярным выражением?
Есть регулярное выражение (\ ]+)>), которое оставляет HTML-тэги. Как наоборот удалить все тэги, оставив только текст?
5 ответов 5
Только надо обязательно помнить, что никакое регулярное выражение не сможет правильно обработать сломанный html:
И для такого дела лучше применять полноценные html-парсеры, а регулярки к html-коду не подпускать вообще.
На данный момент, наиболее близкая к браузерной версия:
PS: Более ранняя версия ответа с другим кодом доступна в истории.
Как по мне, более точное определение тега будет таким
Всё ещё ищете ответ? Посмотрите другие вопросы с метками html регулярные-выражения или задайте свой вопрос.
Связанные
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.9.17.40238
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Php удалить теги html
От автора: допустим, у вас есть кусок кода с каким-то содержимым, а вам нужно получить из него только текст. Вручную удалять все теги может быть очень долго и нудно, поэтому давайте разбираться, как с помощью php убрать html теги.
Если вам надо убрать из текста html-теги, то вам может пригодиться одна php-функция, которая хорошо справляется с этим заданием. Что она делает? Мы ей передаем нужную строку с кодом, а она вырезает оттуда все html и php-команды, возвращая содержимое без кода. Это функция strip_tags, которая имеет один обязательный и один необязательный параметры.
Соответственно, давайте сразу же протестируем ее работу.
На экран выведется фраза “Это текст в абзаце”. Соответственно, вторым параметром можно задать те теги, которые не нужно удалять.
В этой случае мы запретили функции удалять тег span и на экран он выведется вместе с текстом. Я думаю, основная цель strip_tags вам понятна. Если в коде присутствуют комментарии, то они тоже будут удалены. Но что, если удалить теги надо из целого файла? Для этого есть другая команда, которую рассмотрим далее.
Как убрать html теги из текста с помощью fgetss()
Эта команда отличается от предыдущей тем, что позволяет убрать html теги из всего файла. Для этого его предварительно необходимо открыть с помощью fopen(), в которой указывается путь до файла и режим, котором будет работа с ним.
Сама функция fgetss содержит три параметра. Первым является указатель на файл, с которого надо убирать лишнее. Второй параметр – длина получаемых данных, можно увидеть в блокноте или любом текстовом редакторе. Записывается в виде числового значения. Третий и необязательный параметр – разрешенные теги, которые не будут удалены. Этот параметр записывается также, как и для функции strip_tags.
Что мы в данном случае сделали:
После этого файл закрывается. Пользоваться функцией есть смысл, когда необходимо удалить теги из файла, где их может быть сотни.
Убираем html-теги с помощью онлайн сервиса
Возможно, у вас нет желания пользоваться возможностями php для очищения текста от ненужных элементов. Что ж, есть способ гораздо более простой. Это онлайн сервис 0en.ru, который может удалять html дескрипторы и комментарии из скопированного в поле текста. С его помощью можно получить чистый текст уже через несколько секунд.
Единственный минус веб-сервиса в том, что он удаляет абсолютно все, поэтому если вы хотите какие-то из них оставить, то лучше все-таки воспользоваться одной из функций PHP.
Замена символов
Ну а что, если вам нужно удалить всего лишь 1-2 тега на странице. Сделать это еще проще. В любом нормальном текстовом редакторе есть функция “найти и заменить”. В первое поле вы вписываете символы, которые нужно найти (нужный нам открывающий тег), а во второе – на что его заменить. Здесь просто оставляем пустое место. Клац, и все удалилось. Соответственно, если тег парный, то нужно не забыть удалить и его закрывающую часть.
Сегодня мы с вами узнали несколько способов удаления html тегов из текста. Используйте если надо и читайте наш блог, чтобы узнавать еще больше о веб-технологиях.
В течение долгого времени я пользуюсь функцией PHP HTML “очистки” пользовательского ввода, чтобы гарантировать, что никакой вредоносный код не будет размещен нарочно или случайно. Но при этом я разрешаю использовать определенные HTML-теги и атрибуты:
Большая часть функций для работы с HTML-кодом используют регулярные выражения, а это сплошная головная боль. В течение длительного времени созданная мной функция работала достаточно хорошо, пока мне не понадобилось разрешить внутри некоторых тегов data-атрибуты HTML5.
Они выглядят следующим образом:
После “data” идет имя переменной для соответствующего типа данных. И здесь старая версия моей функции не смогла справиться с этой переменной частью имени, и мне приходилось добавлять каждый тип данных атрибута в используемый мной список.
В итоге я разработал улучшенную функцию, которая использует PHP библиотеку DOMDocument, чтобы создать объектную модель документа и удалить всё кроме тегов и атрибутов, которые необходимо сохранить.
Новый подход позволяет использовать регулярное выражение только для выбранных типов данных — не надо искать эти атрибуты в HTML-коде. Задача поиска тегов и атрибутов осуществляется с помощью XPath методов PHP DOMDocument.
Новая функция удаления HTML тегов в PHP принимает строку для “очистки” и два массива в качестве параметров; массивы — список разрешенных тегов и список допустимых атрибутов. Если атрибуты “href” или “src” разрешены, функция проверяет: если значение атрибута – это код JavaScript, то изменяет его на “#”:
Перед тем, как с помощью PHP убрать HTML теги, расскажу о нескольких проблемах, связанных с использованием DOMDocument:
Перевод статьи “Tech Note: A PHP Function to Strip Specific HTML Tags and Attributes” был подготовлен дружной командой проекта Сайтостроение от А до Я.
Проверка и обработка входящих данных является одной из распространённых задач в программировании. Язык PHP обычно используется для веб-приложений, поэтому здесь наиболее актуально удаление HTML тегов из текста, ведь именно они наиболее подверженны сторонним инъекциям. В данной статье я хочу напомнить Вам о старичке stip_tags() и его фишках, а также предложить решения для удаления секционных HTML тегов и ещё парочку полезных бонусов вдогонку.
И так. Основным нашим инструментом для удаления HTML тегов из текста является функция strip_tags(). Мы передаём ей строковое значение, а она удаляет из него HTML и PHP теги, например:
Этот пример выведет строку:
Примечательно здесь то, что у функции имеется и второй (не обязательный, но полезный) параметр, значением которого является строка с перечнем разрешенных HTML тегов, например:
Этот пример выведет строку:
По моему, очень удобно. Тем не менее, это не решает одну важную проблему – удаление секционных HTML тегов, например: script, noscript и style – они наиболее распространённые. Когда мне нужно убрать такие секционные теги, а также варианты начинающиеся с « » и заканчивающиеся символом « > », я использую следующий PHP код:
Напоследок хочу предложить Вам ещё несколько полезных решений. Так в тексте лучше заменить табуляцию пробелом, результат интерпретации того и другого в браузере идентичны, а хлопот будет меньше, например:
Если Вам не нужны переносы строк, их тоже можно заменить пробелами, например:
От лишних же пробелов можно избавиться простым регулярным выражением, например:
На этом у меня всё. Спасибо за внимание. Удачи!
Многие спрашивают: Как удалить все теги из текса?

1. Используя функцию strip_tags &mdash Удаляет HTML и PHP-теги из строки
Результат выполнения данного примера:
Параграф. Еще текст
2. Используя регулярные выражения:
В результате получите чистый текст без HTML тегов











