Как я могу использовать jQuery для декодирования HTML-объектов в строке?
javascript
jquery
html
EddyR
источник
источник
Ответы:
На самом деле, попробуйте
источник
$("<div/>").html('<img src="http://www.google.com/images/logos/ps_logo2.png" onload=alert(1337)>')
. В Firefox или Safari выдает предупреждение.str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/g, "")
или что-то подобное.Без каких-либо jQuery:
Это работает аналогично принятому ответу , но безопасно для использования с ненадежным пользовательским вводом.
Проблемы безопасности в аналогичных подходах
Как отметил Майк Самуэль , выполнение этого с использованием ненадежного пользовательского ввода
<div>
вместо<textarea>
уязвимости XSS, даже если<div>
оно никогда не добавляется в DOM:Тем не менее, эта атака невозможна против a,
<textarea>
потому что нет элементов HTML, которым разрешено содержимое a<textarea>
. Следовательно, любые HTML-теги, все еще присутствующие в «кодированной» строке, будут автоматически кодироваться сущностью браузером.* Спасибо Эру Пенкману за обнаружение этой уязвимости.
источник
decodedString = textArea.value;
textArea.remove();
return decodedString;
if ('remove' in Element.prototype) textArea.remove();
$("<div />").html(string).text()
выполнит любой javascript в предоставленной строке , что, я подозреваю, является причиной вашей проблемы. Принятый ответ должен быть обновлен до этого.Как сказал Майк Сэмюэл, не используйте jQuery.html (). Text () для декодирования html-объектов, поскольку это небезопасно.
Вместо этого используйте средство визуализации шаблонов, такое как Mustache.js или decodeEntities из комментария @ VyvIT.
Underscore.jsБиблиотека утилит-пояса поставляется с
escape
иunescape
методами, но они небезопасны для ввода пользователем:_.escape (строка)
_.unescape (строка)
источник
unescape
в документы, кстати._.unescape("'")
в результате просто "& # 39;" вместо одиночной кавычки. Есть ли что-то, что я пропускаю или подчеркиваю, не скрываются лиescape
иunescape
методы ... небезопасны для пользовательского ввода" . Что вы под этим подразумеваете? Для меня это звучит чепухой, но, может быть, я что-то упустил - вы можете уточнить?_.unescape("<img src=fake onerror=alert('boo!')>")
(в Chrome / FF / IE). Но он не обнаружил никакого предупреждения. Пробовал в консоли, а также положить в мой файл JS тоже. Тот же результат.Я думаю, что вы путаете текст и методы HTML. Посмотрите на этот пример, если вы используете внутренний HTML-код элемента в качестве текста, вы получите декодированные HTML-теги (вторая кнопка). Но если вы используете их как HTML, вы получите представление в формате HTML (первая кнопка).
Первая кнопка пишет: вот HTML- контент.
Вторая кнопка пишет: вот содержимое <B> HTML </ B>.
Кстати, вы можете увидеть плагин, который я нашел в плагине jQuery - HTML декодировать и кодировать, который кодирует и декодирует HTML-строки.
источник
Вопрос ограничен «с помощью jQuery», но это может помочь некоторым узнать, что код jQuery, приведенный в лучшем ответе здесь, выполняет следующее ниже ... это работает с или без jQuery:
источник
Вы можете использовать библиотеку he , доступную по адресу https://github.com/mathiasbynens/he
Пример:
Я обратился к автору библиотеки с вопросом о том, была ли какая-либо причина использовать эту библиотеку в клиентском коде в пользу
<textarea>
взлома, приведенного в других ответах здесь и в других местах. Он представил несколько возможных оправданий:Если вы используете server.js на стороне сервера, использование библиотеки для кодирования / декодирования HTML дает вам единственное решение, которое работает как на стороне клиента, так и на стороне сервера.
Алгоритмы декодирования объектов в некоторых браузерах содержат ошибки или не поддерживают некоторые ссылки на именованные символы . Например, Internet Explorer будет
правильно декодировать и отображать неразрывные пробелы ( ), но сообщать о них как об обычных пробелах, а не неразрывных черезinnerText
свойство элемента DOM , нарушая<textarea>
взлом (хотя и незначительным образом). Кроме того, IE 8 и 9 просто не поддерживает какой - либо из новых именованных ссылок на символы , добавленные в HTML 5. Автор он также проводит проверку по имени справочной поддержки символов в http://mathias.html5.org/tests/html / именованные символьные ссылки / . В IE 8 сообщается более тысячи ошибок.Если вы хотите быть изолированными от ошибок браузера, связанных с декодированием сущностей и / или иметь возможность обрабатывать полный диапазон именованных ссылок на символы, вы не можете избежать неприятностей
<textarea>
; вам понадобится библиотека, как он .Он просто чертовски хорош, чувствует себя так, как будто не так хакерски.
источник
закодировать:
расшифровывает:
источник
использование
Проще всего сделать это на стороне сервера, потому что, очевидно, JavaScript не имеет встроенной библиотеки для обработки сущностей, и я не нашел ничего в верхней части результатов поиска для различных сред, расширяющих JavaScript.
Ищите «JavaScript HTML-сущности», и вы можете найти несколько библиотек именно для этой цели, но, вероятно, все они будут построены на основе вышеупомянутой логики - заменить сущность на сущность.
источник
Мне просто нужно было использовать символ сущности HTML (⇓) в качестве значения кнопки HTML. HTML-код выглядит хорошо с самого начала в браузере:
Теперь я добавил переключатель, который также должен отображать характер. Это мое решение
На дисплее снова отобразится ⇓. Я надеюсь, что это может кому-то помочь.
источник
"Embed & Share \u21d1"
), или еще лучше, просто"Embed & Share ⇑"
если вы можете обслуживать свой сценарий в UTF-8 (или UTF-16, или в любой другой кодировке, поддерживающей символ ⇑). Использование элемента DOM для анализа HTML-сущности просто для того, чтобы запрограммировать произвольный символ Юникода в строку JavaScript, - это хитрый и творческий подход, который мог бы гордить Рубе Голдберга, но не является хорошей практикой; экранирование Юникода на языке специально для обработки этого варианта использования.Вы должны сделать пользовательскую функцию для объектов HTML:
источник
Предположим, у вас ниже строки.
Наши роскошные каюты теплые, уютные и удобный
ул и назначить обратно
тег.
Это оно.
источник
Для пользователей ExtJS, если у вас уже есть закодированная строка, например, когда возвращаемое значение библиотечной функции является содержимым innerHTML, рассмотрите эту функцию ExtJS:
источник
Расширить класс String:
и использовать в качестве метода:
источник
Попробуй это :
parseHTML - это функция из библиотеки Jquery, которая возвращает массив, содержащий некоторые сведения о данной строке.
в некоторых случаях значение String велико, поэтому функция будет разделять содержимое на множество индексов.
и чтобы получить все данные индексов, вы должны перейти к любому индексу, а затем получить доступ к индексу, называемому «целым текстом».
Я выбрал индекс 0, потому что он будет работать во всех случаях (маленькая строка или большая строка).
источник
Вот еще одна проблема: Экранированная строка не выглядит читаемой при назначении входного значения
Пример: https://jsfiddle.net/kjpdwmqa/3/
источник
escape
метод Underscore.js. Также нет объяснения, как ваш пример кода должен решить проблему OP.Кроме того, есть библиотека для этого ..
здесь, https://cdnjs.com/libraries/he
Использование заключается в следующем ...
веселит.
источник
Чтобы декодировать HTML-объекты с помощью jQuery, просто используйте эту функцию:
Как пользоваться:
Javascript:
HTML:
источник
Самый простой способ - установить селектор класса на ваши элементы, а затем использовать следующий код:
Больше ничего не нужно!
У меня была эта проблема, и я нашел это ясное решение, и оно отлично работает.
источник
Я думаю, что это полная противоположность выбранному решению.
источник