экранирование: "var name = '</script>'" - PullRequest
0 голосов
/ 18 октября 2010

наш средний уровень должен что-то сделать, чтобы </script> не отображался дословно в строке javascript.например, во всех браузерах анализатор HTML при первом проходе будет игнорировать контекст javascript, увидит первый скрипт close, затем увидит мусор и увидит второй скрипт close.См .: using-script-in-a-javascript-literal

<HTML>
<BODY>
  start
  <SCRIPT>
    alert( "</SCRIPT>" );
  </SCRIPT>
  finish
</BODY>
</HTML>

Моя первая идея, чтобы исправить это, - расширить символы, которые мы экранируем для строк JavaScript, чтобы включить '>' и'<' - это похоже на работу в протестированных мною браузерах, но не соответствует стандартам: <a href="http://www.javascriptkit.com/jsref/escapesequence.shtml" rel="nofollow"> escapesequence.shtml

edit: это правило специально для содержимого, отображаемого в javascriptстроковый литерал.

1 Ответ

5 голосов
/ 18 октября 2010

Вам нужно как-то удалить литерал </:

"<" + "/"
"<\/"
"<\x2F"
"\x3C/"
"<\u002F"
"\u003C/"

См. описание типа CDATA :

Хотя элементы STYLE и SCRIPT используют CDATA для своей модели данных, для этих элементов пользовательские агенты должны обрабатывать CDATA по-разному. Разметка и сущности должны рассматриваться как необработанный текст и передаваться приложению как есть. Первое вхождение последовательности символов "</" (открытый разделитель конечных тегов) обрабатывается как завершение конца содержимого элемента. В действительных документах это будет конечный тег для элемента.

...