Необходимое экранирование зависит от контекста, в который вставлено значение. Использование неправильного экранирования может разрешить использование специальных символов в одном контексте, которые не являются специальными символами в другом контексте, или испортить значения.
Экранирование JavaScript предназначено для значений, которые вставляются непосредственно в строковый литерал JavaScript через серверный язык шаблонов.
Итак, у них есть пример:
x.setAttribute("value", '<%=Encoder.encodeForJS(companyName)%>');
Здесь значение companyName
вставляется в скрипт, заключенный в одинарные кавычки, что делает его строковым литералом JavaScript. Специальные символы здесь - это кавычки, новые строки и некоторые символы пробела в Юникоде. Они должны быть преобразованы в escape-последовательности JavaScript. Таким образом, цитата станет \x27
, а не сущностью HTML '
. Если бы вы использовали кодировку HTML, то символ кавычки отображался бы как '
, а символ новой строки вызывал бы синтаксическую ошибку. Кодирование JavaScript может быть сделано в Java с помощью encodeForJavaScript или PHP с помощью json_encode .
Он вставляется в значение JavaScript, поэтому должно быть закодировано в JavaScript. Люди привыкли к атрибутам кодирования HTML, но это имеет смысл только при прямой вставке в HTML, а не при использовании метода setAttribute
DOM. Необходимая кодировка такая же, как если бы она была похожа на:
var x = '<%=Encoder.encodeForJS(companyName)%>';
Атрибут не обязательно должен быть закодирован в HTML, потому что он не находится в контексте HTML. Кодировка HTML необходима, когда значение вставляется непосредственно в атрибут, такой как:
<input value='<%=Encoder.encodeForHTML(companyName)%>'>