Случай 2 может быть обработан с использованием encodeURIComponent () , как предложено danp .
Случай 3 не будет выполнять скрипт в большинстве браузеров . Если вы хотите, чтобы вывод документа был <script>...</script>
, вам следует вместо этого отредактировать текстовое содержимое элемента:
var a = "<script>alert('hi');</script>";
if ("textContent" in b)
b.textContent = a; // W3C DOM
else
b.innerText = a; // Internet Explorer <=8
Случаи 1 и 4 на самом деле не являются проблемами кодирования, это проблемы санитарии. Кодирование строк, передаваемых этим функциям, может вызвать синтаксическую ошибку или просто привести к строковому значению, которое никому не назначается. Дезинфекция обычно включает в себя поиск определенных шаблонов и либо разрешение действия, либо его запрещение - безопаснее иметь белый список, чем черный (это звучит ужасно!).
Internet Explorer 8 имеет интересную функцию под названием window.toStaticHTML () , которая удаляет любое содержимое сценария из строки HTML. Очень полезно для очистки HTML перед вставкой в DOM. К сожалению, это частная собственность, поэтому вы не найдете эту функцию в других браузерах.