Есть ли простой способ взять строку HTML в JavaScript и удалить HTML?
javascript
html
string
Bryan
источник
источник
strip("<img onerror='alert(\"could run arbitrary JS here\")' src=bogus>")
источник
<img src=http://www.google.com.kh/images/srpr/nav_logo27.png onload="alert(42)"
если вы вводите черезdocument.write
или объединяете строку, содержащую>
перед введением черезinnerHTML
.>
во втором останется. Это не опасность для инъекций. Опасность возникает из-за<
левого в первом, что приводит к тому, что анализатор HTML находится в контексте, отличном от состояния данных, при запуске второго. Обратите внимание, что нет перехода из состояния данных в>
.<button onClick="dostuff('>');"></button>
Допущения правильно написанного HTML вы все равно должны принять во внимание, что знак «больше» может быть где-то в цитируемом тексте атрибута. Также вы хотели бы удалить весь текст внутри<script>
тегов, по крайней мере.Самый простой способ:
Это извлекает весь текст из строки HTML.
источник
Я хотел бы поделиться отредактированной версией Shog9 утвержденного ответа «s .
В виде отметил Майк Сэмюэл с комментарием, эта функция может выполнять встроенные коды JavaScript.
Но Shog9 прав, когда говорит "пусть браузер сделает это за вас ..."
так .. вот моя отредактированная версия, используя DOMParser :
вот код для проверки встроенного JavaScript:
Кроме того, он не запрашивает ресурсы при разборе (например, изображения)
источник
В качестве расширения метода jQuery, если ваша строка может не содержать HTML (например, если вы пытаетесь удалить HTML из поля формы)
вернет пустую строку, если нет HTML
Использование:
вместо.
Обновление: Как было отмечено в комментариях, в некоторых случаях это решение будет выполнять javascript, содержащийся в нем,
html
еслиhtml
злоумышленник может повлиять на значение, используйте другое решение.источник
$("<p>").html(html).text();
jQuery('<span>Text :) <img src="a" onerror="alert(1)"></span>').text()
Преобразование HTML для электронной почты в виде простого текста с сохранением гиперссылок (href) в целости и сохранности
Вышеупомянутая функция, опубликованная Hypoxide, работает нормально, но я хотел кое-что, что в основном конвертировало бы HTML, созданный в редакторе Web RichText (например, FCKEditor), и очищало весь HTML, но оставляло все ссылки, потому что я хотел и HTML, и текстовая версия, помогающая создавать правильные части электронной почты STMP (как HTML, так и обычный текст).
После долгого поиска в Google я и мои коллеги придумали это с помощью движка регулярных выражений в Javascript:
str
переменная начинается так:и после запуска кода это выглядит так:
Как вы можете видеть, весь HTML был удален, а Ссылка с гиперссылкой была сохранена. Кроме того, я заменил
<p>
и<br>
тег с\n
новым строкой (полукоксом) , так что какое - то визуальное форматирования было сохранено.Чтобы изменить формат ссылки (например,
BBC (Link->http://www.bbc.co.uk)
), просто отредактируйте$2 (Link->$1)
, где$1
находится URL / URI href, а$2
текст гиперссылки. При наличии ссылок непосредственно в текстовом виде большинство почтовых клиентов SMTP преобразуют их, чтобы пользователь мог щелкнуть по ним.Надеюсь, вы найдете это полезным.
источник
Улучшение принятого ответа.
Таким образом, что-то вроде этого не принесет вреда:
Firefox, Chromium и Explorer 9+ безопасны. Опера Престо по-прежнему уязвима. Также изображения, упомянутые в строках, не загружаются в Chromium и Firefox, сохраняя http-запросы.
источник
<script><script>alert();
Это должно делать работу в любой среде Javascript (включая NodeJS).
источник
<html><style..>* {font-family:comic-sans;}</style>Some Text</html>
Я изменил ответ Jibberboy2000, включив в него несколько
<BR />
форматов тегов, удалив все внутри<SCRIPT>
и<STYLE>
теги, отформатировав полученный HTML, удалив несколько разрывов строк и пробелов, и преобразовав код в формате HTML в обычный. После некоторого тестирования выясняется, что вы можете преобразовать большинство полных веб-страниц в простой текст, в котором сохраняются заголовок и содержимое страницы.В простом примере
становится
Функция JavaScript и тестовая страница выглядят так:
Он был использован с этим HTML:
источник
/<p.*>/gi
должно быть/<p.*?>/gi
.<br>
тегов вы можете использовать хорошее регулярное выражение вместо этого:/<br\s*\/?>/
таким образом у вас есть только один заменить вместо 3. Кроме того, мне кажется , что для декодирования лиц , за исключением вы можете иметь один регулярное выражение, что - то вроде этого:/<[a-z].*?\/?>/
.Это версия регулярного выражения, которая более устойчива к искаженному HTML, например:
Незакрытые теги
Some text <img
"<", ">" внутри атрибутов тега
Some text <img alt="x > y">
Newlines
Some <a href="http://google.com">
Код
источник
Другое, по общему признанию, менее изящное решение, чем nickf или Shog9, было бы рекурсивно обходить DOM, начиная с тега <body>, и добавлять каждый текстовый узел.
источник
Если вы хотите сохранить ссылки и структуру содержимого (h1, h2 и т. Д.), Вам следует проверить TextVersionJS. Вы можете использовать его с любым HTML, хотя он был создан для преобразования электронного письма HTML в простой текст.
Использование очень просто. Например, в файле node.js:
Или в браузере с чистым js:
Это также работает с require.js:
источник
После проверки всех упомянутых ответов, большинство из них, если не все, имели крайние случаи и не могли полностью удовлетворить мои потребности.
Я начал изучать, как это делает php, и наткнулся на библиотеку php.js, которая копирует метод strip_tags: http://phpjs.org/functions/strip_tags/
источник
allowed == ''
я думаю, это то, о чем просил ОП, а это почти то, что Байрон ответил ниже (Байрон только[^>]
ошибся.)allowed
параметр, вы уязвимы для XSS:stripTags('<p onclick="alert(1)">mytext</p>', '<p>')
возвращается<p onclick="alert(1)">mytext</p>
Учет> внутри атрибутов и
<img onerror="javascript">
во вновь созданных элементах dom.Применение:
демо:
https://jsfiddle.net/gaby_de_wilde/pqayphzd/
демо топ-ответа, делающего ужасные вещи:
https://jsfiddle.net/gaby_de_wilde/6f0jymL6/1/
источник
string with <a malicious="attribute \">this text should be removed, but is not">example</a>
).Многие уже ответили на это, но я подумал, что было бы полезно поделиться функцией, которую я написал, которая удаляет HTML-теги из строки, но позволяет вам включать массив тегов, которые вы не хотите удалять. Он довольно короткий и хорошо работает для меня.
источник
Я думаю, что самый простой способ - просто использовать регулярные выражения, как кто-то упоминал выше. Хотя нет смысла использовать кучу из них. Пытаться:
источник
[^<>]
с ,[^>]
поскольку действительный тег не может содержать<
символ, то уязвимость XSS исчезает.Я внес некоторые изменения в оригинальный скрипт Jibberboy2000. Надеюсь, он кому-нибудь пригодится
источник
Вот версия, которая решает проблему безопасности @ MikeSamuel:
Обратите внимание, что он вернет пустую строку, если разметка HTML не является допустимым XML (иначе, теги должны быть закрыты, а атрибуты должны быть в кавычках). Это не идеально, но избегает проблемы использования потенциала безопасности.
Если вам не нужна действительная разметка XML, попробуйте использовать:
но это не идеальное решение и по другим причинам.
источник
Вы можете безопасно удалить HTML-теги, используя атрибут песочницы iframe .
Идея здесь состоит в том, что вместо того, чтобы пытаться пересмотреть нашу строку, мы используем преимущества встроенного синтаксического анализатора браузера, вставляя текст в элемент DOM и затем запрашивая
textContent
/innerText
свойство этого элемента.Лучше всего подходящим элементом для вставки нашего текста является вставленный в песочную форму iframe, таким образом мы можем предотвратить любое выполнение произвольного кода (также известный как XSS ).
Недостатком этого подхода является то, что он работает только в браузерах.
Вот что я придумала (не проверено в бою):
Использование ( демо ):
источник
let
иconst
операторами. Кроме того, используя ваше решение, я получил множество ссылок наiframes
неиспользованные внутри документа. Подумайте о том, чтобы добавитьdocument.body.removeChild(sandbox)
код в код для будущих читателей, использующих копии.С помощью jQuery вы можете просто получить его, используя
источник
Код ниже позволяет вам сохранить некоторые HTML-теги, удаляя все остальные
источник
phpjs
). Если вы используетеallowed
параметр, вы уязвимы для XSS:stripTags('<p onclick="alert(1)">mytext</p>', '<p>')
возвращается<p onclick="alert(1)">mytext</p>
Также можно использовать фантастический HTML-парсер htmlparser2 pure JS. Вот рабочая демонстрация:
Выход будет
This is a simple example.
Смотрите это в действии здесь: https://tonicdev.com/jfahrenkrug/extract-text-from-html
Это работает как в узле, так и в браузере, если вы упаковываете свое веб-приложение с помощью такого инструмента, как веб-пакет.
источник
Мне просто нужно было удалить
<a>
теги и заменить их текстом ссылки.Кажется, это отлично работает.
источник
title="..."
.Для более простого решения попробуйте это => https://css-tricks.com/snippets/javascript/strip-html-tags-in-javascript/
источник
Я сам создал рабочее регулярное выражение:
источник
простые 2 строки JQuery, чтобы раздеть HTML.
источник
Принятый ответ работает в основном нормально, однако в IE, если
html
строка,null
вы получаете"null"
(вместо ''). Исправлена:источник
Используя Jquery:
источник
input
Элемент поддерживает только одну строку текста :Обновление: это работает как ожидалось
источник
Определите это как плагин jquery и используйте его следующим образом:
источник