当前位置:  开发笔记 > 编程语言 > 正文

使用jQuery转义HTML字符串

如何解决《使用jQuery转义HTML字符串》经验,为你挑选了14个好方法。

有没有人知道在jQuery中从字符串中转义HTML的简单方法?我需要能够传递任意字符串并将其正确转义以便在HTML页面中显示(防止JavaScript/HTML注入攻击).我确信可以扩展jQuery来实现这一点,但我目前还不了解框架来完成这个任务.



1> Tom Gruner..:

还有来自mustache.js的解决方案

var entityMap = {
  '&': '&',
  '<': '<',
  '>': '>',
  '"': '"',
  "'": ''',
  '/': '/',
  '`': '`',
  '=': '='
};

function escapeHtml (string) {
  return String(string).replace(/[&<>"'`=\/]/g, function (s) {
    return entityMap[s];
  });
}


这应该是公认的答案 - 它简单,高效,不需要依赖,并且完全没有模糊的黑客攻击.
@amwinter,我在上面扩展了脚本,将"\n":'
'添加到实体地图,并将正则表达式更新为/ [&<>"'\ /] | [\n]/g
请注意,奇怪的是,```映射到具有*decimal*格式的实体,而```使用*hex*格式.
将`\n`转换为```的指导是什么?
这是源代码的更新链接:https://github.com/janl/mustache.js/blob/ba510eb3549e5c7e673fd262e87f2a8027e03237/mustache.js#L47-L60
@amwinter将`\n`转换为```有时是有害的 - 例如:在title等属性中.使用
或明确地执行. 
我最终得到了“&amp; amp; amp; amp;”。我在哪里可以买到万用表
为什么编码`/`?这是[不需要](http://stackoverflow.com/questions/7381974/which-characters-need-to-be-escaped-on-html).

2> travis..:

由于您使用的是jQuery,因此您只需设置元素的text属性即可:

// before:
// 
text
var someHtmlString = ""; // set a DIV's text: $("div.someClass").text(someHtmlString); // after: //
<script>alert('hi!');</script>
// get the text in a string: var escaped = $("
").text(someHtmlString).html(); // value: // <script>alert('hi!');</script>


您错过了必须访问$("div.someClass").html()以获取转义版本的要点.
@travis jQuery网站上记录了这一点:"由于不同浏览器中HTML解析器的不同,返回的文本可能因换行符和其他空格而异." http://api.jquery.com/text/
如果你的字符串中有空格和\n\r\t字符,那么这不是跨浏览器安全的
这不会逃避报价和双引号,这是不好的!http://wonko.com/post/html-escaping
@mklement如果你已经在使用这个解决方案,你就不会遇到任何问题:`$(element2).attr("some-attr",$(element1).html());`See这个例子:http://jsbin.com/atibig/1/edit
@travis谢谢; 我认为这是你暗示的,但只是为了明确:`attr()`做自己的编码,所以你可以直接传递未编码的文本*; 例如,`$(elem).attr("some-attr","
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有