Как декодировать объекты HTML с помощью jQuery?

Нет. упоминания спецификации HTML 5:

метод и formmethod атрибуты содержания перечисляются атрибуты со следующими ключевыми словами и состояниями:

ключевое слово добирается , отображение на состояние ДОБИРАЕТСЯ, указывая, что HTTP ПОЛУЧАЕТ метод. ПОЛУЧИТЬ метод должен только запросить и получить данные и не должен иметь никакого другого эффекта.

сообщение ключевого слова , отображаясь на государственный пост, указывая на метод POST HTTP. Метод THE POST запрашивает, чтобы сервер принял, что данные отправленной формы обрабатываются, который может привести к объекту, добавляемому к базе данных, созданию нового ресурса веб-страницы, обновлению существующей страницы или всем упомянутым результатам.

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

недопустимое значение по умолчанию значения для этих атрибутов является ПОЛУЧИТЬ состоянием

, Т.е. HTML-формы только поддерживают , ДОБИРАЮТСЯ и POST как методы Запроса HTTP. Обходное решение для этого должно туннелировать другие методы через POST при помощи скрытого поля формы, которое читается сервером и запросом, диспетчеризированным соответственно.

Однако ДОБИРАЮТСЯ , , POST, ПОМЕСТИЛ , и УДАЛЯЮТ , поддерживаются реализациями XMLHttpRequest (т.е. вызовы Ajax) во всех главных веб-браузерах (IE, Firefox, Safari, Chrome, Opera).

326
задан Mark Amery 10 July 2015 в 09:56
поделиться

5 ответов

Примечание по безопасности: использование этого ответа (сохраненного в исходной форме ниже) может привести к XSS-уязвимости в вашем приложении. Вы не должны использовать этот ответ. Прочтите ответ lucascaro для объяснения уязвимостей в этом ответе и используйте подход либо из этого ответа, либо вместо ответа Марка Эймери .

На самом деле, попробуйте

var decoded = $("<div/>").html(encodedStr).text();
433
ответ дан 23 November 2019 в 00:50
поделиться

Я думаю, вы путаете текст и методы HTML. Посмотрите на этот пример: если вы используете внутренний HTML-код элемента в качестве текста, вы получите декодированные HTML-теги (вторая кнопка). Но если вы используете их как HTML, вы получите представление в формате HTML (первая кнопка).

<div id="myDiv">
    here is a <b>HTML</b> content.
</div>
<br />
<input value="Write as HTML" type="button" onclick="javascript:$('#resultDiv').html($('#myDiv').html());" />
&nbsp;&nbsp;
<input value="Write as Text" type="button" onclick="javascript:$('#resultDiv').text($('#myDiv').html());" />
<br /><br />
<div id="resultDiv">
    Results here !
</div>

Первая кнопка пишет: вот содержание HTML .

Вторая кнопка пишет: вот содержание HTML .

Кстати,

28
ответ дан 23 November 2019 в 00:50
поделиться

Использовать

myString = myString.replace( /\&amp;/g, '&' );

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

Поищите "объекты JavaScript HTML", и вы можете найти несколько библиотек для этой цели, но они '

4
ответ дан 23 November 2019 в 00:50
поделиться

Без jQuery:

 функция decodeEntities (encodedString) {var textArea = document.createElement ('textarea'); textArea.innerHTML = encodedString; вернуть textArea.value; } console.log (decodeEntities ('1 & amp; 2')); // '1 & 2' 

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


Проблемы безопасности при аналогичных подходах

Как отмечалось в Майк Самуэль , делая это с помощью

вместо