HTML-кодировка теряется при чтении атрибута из поля ввода

Я использую переменные FS и OFS для управления файлами зоны BIND, которые ограничены табуляцией. Вот один из моих сценариев https://gist.github.com/RichardBronosky/abe1652c2d5c78c35b92ad02bdf0d0af#file-dns_update-sh-L36-L39

Мясо:

awk -v FS='\t' -v OFS='\t' \
    -v record_type=$record_type \
    -v hostname=$hostname \
    -v ip_address=$ip_address '
$1==hostname && $3==record_type {$4=ip_address}
{print}
' $zone_file > $temp

Это простой и понятный способ сделать это.

719
задан Alan H. 8 April 2019 в 22:08
поделиться

4 ответа

РЕДАКТИРОВАТЬ: Этот ответ был опубликован давно, а функция htmlDecode представила XSS-уязвимость. Было изменено изменение временного элемента с div на textarea , что снизило вероятность XSS. Но в настоящее время я бы посоветовал вам использовать DOMParser API, как это предлагается в другом ответе .


Я использую эти функции:

function htmlEncode(value){
  // Create a in-memory element, set its inner text (which is automatically encoded)
  // Then grab the encoded contents back out. The element never exists on the DOM.
  return $('<textarea/>').text(value).html();
}

function htmlDecode(value){
  return $('<textarea/>').html(value).text();
}

В основном элемент div создается в памяти, но никогда не добавляется к документ.

В функции htmlEncode я установил innerText элемента и получил закодированный innerHTML ; в функции htmlDecode я устанавливаю значение innerHTML элемента, и извлекается innerText .

1062
ответ дан 22 November 2019 в 21:31
поделиться

Насколько мне известно, в javascript нет прямого метода кодирования / декодирования HTML.

Однако вы можете использовать JS для создания произвольного элемента, установите его внутренний текст, затем прочтите его с помощью innerHTML.

Допустим, с jQuery это должно работать:

var helper = $('chalk & cheese').hide().appendTo('body');
var htmled = helper.html();
helper.remove();

Или что-то в этом роде.

3
ответ дан 22 November 2019 в 21:31
поделиться

Прототип имеет встроенный класс String . Поэтому, если вы используете / планируете использовать Prototype, он будет делать что-то вроде:

'<div class="article">This is an article</div>'.escapeHTML();
// -> "&lt;div class="article"&gt;This is an article&lt;/div&gt;"
5
ответ дан 22 November 2019 в 21:31
поделиться

FWIW, кодировка не теряется. Кодировка используется парсером разметки (браузером) при загрузке страницы. После считывания и анализа источника и загрузки DOM-файла в память браузером, кодировка разбирается на то, что она представляет собой. Таким образом, к моменту выполнения JS, чтобы прочитать что-нибудь в памяти, символ, который он получает, является той кодировкой, которую он представляет.

Может быть, я здесь и оперирую строго по семантике, но я хотел, чтобы вы поняли назначение кодирования. Слово "lost" звучит так, как будто что-то не работает так, как должно бы работать.

6
ответ дан 22 November 2019 в 21:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: