jquery - 在 jquery 模板中将 &lt 渲染为文本,而不是 < 或 &gt,因为它不是 >

标签 jquery asp.net-mvc-3 jquery-templates javascript-injection

我有一条短信&lt;script&gt;alert('injection');&lt;/script&gt;我想要在 ASP MVC3 应用程序中呈现为 jquery 模板的 View 中呈现它。但是&lt;显示为< .

我的 jquery 模板如下:

<script id="nameTemplate" type="text/x-jquery-tmpl">
    <p>${Name}</p>
</script>

我们如何将其呈现为纯文本?

最佳答案

正如 SpaceBison 所暗示的,您的浏览器将解码 HTML 编码值并将其写为“纯文本”HTML。

为了将值写出编码,您实际上必须对该值进行“双重编码”,因此当浏览器解码并呈现它时,它仍然会被编码一次。

如果您的值最初来自 ASP.NET MVC 模型属性或类似属性(假设这基于您的标签),则可以在服务器端代码中使用 HttpUtility.HtmlEncode,例如:

Model.Name = HttpUtility.HtmlEncode(Model.Name);

但是,如果您需要在前端执行此操作,您可以编写一个简单的 jQuery 函数来对值进行编码(无耻地从 this answer 窃取):

function HtmlEncode(str) {
    return String(str)
        .replace(/&/g, '&amp;')
        .replace(/"/g, '&quot;')
        .replace(/'/g, '&#39;')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;');
}

然后,在将项目添加到容器之前,您可以在 jQuery 中执行以下操作:

Name = HtmlEncode(Name);

要查看其实际效果:http://jsfiddle.net/Rb2VJ/1/

关于jquery - 在 jquery 模板中将 &lt 渲染为文本,而不是 < 或 &gt,因为它不是 >,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15655809/

相关文章:

javascript - Angular 复选框指令

jquery - 向远程验证属性 MVC3 添加延迟

javascript - 在多个数据绑定(bind)中使用模板

javascript - 如何将所见即所得编辑器集成到 jQuery 模板中?

javascript - javascript 中的警报未显示

jquery - 如何设置 JPlayer 海报元素的样式?

javascript - 如何在jquery中获取选定的选项卡名称

c# - Html.BeginForm Post 转到 HttpGet 操作而不是 IE 中的 HttpPost,在 Chrome 和 Firefox 中很好

asp.net-mvc-3 - View 中的多个 ViewModel

javascript - 如何在客户端模板应用程序中保存用户名和密码