Визуализируйте & lt как текст вместо <или & gt как это не> в шаблоне jquery
У меня есть текст <script>alert('injection');</script>
который я хочу сделать, как это в представлении, которое отображается как шаблон jquery в приложении ASP MVC3. Но <
dsiplayed как <
,
Мои шаблоны jquery ниже:
<script id="nameTemplate" type="text/x-jquery-tmpl">
<p>${Name}</p>
</script>
Как мы можем сделать это как обычный текст?
2 ответа
Как намекает SpaceBison, ваш браузер будет декодировать HTML-кодированные значения и записывать их как "обычный текст" HTML.
Чтобы записать значение в кодированном виде, вам фактически придется "дважды кодировать" значение, поэтому, когда браузер декодирует и отображает его, оно все равно будет закодировано один раз.
Если ваше значение изначально исходит из свойства модели ASP.NET MVC или аналогичного (при условии, что это основано на ваших тегах), вы можете использовать HttpUtility.HtmlEncode
в вашем коде на стороне сервера, например:
Model.Name = HttpUtility.HtmlEncode(Model.Name);
Однако, если вам нужно сделать это во внешнем интерфейсе, вы можете написать простую функцию jQuery для кодирования значения (бессовестно похищенного из этого ответа):
function HtmlEncode(str) {
return String(str)
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
Затем вы можете сделать следующее в вашем jQuery, прежде чем добавить элемент в свой контейнер:
Name = HtmlEncode(Name);
Чтобы увидеть это в действии: http://jsfiddle.net/Rb2VJ/1/
Получить &
буквально, используйте &lt;
$(elem).text("<");
также будет отображать его в виде простого текста.
$(elem).html("&lt;");
для HTML.