jQuery 技巧不编码引号,在 IE 中它会去除你的空格。
基于Django 中的转义模板标签,我猜它已经被大量使用/测试过,我制作了这个功能来满足需要。
可以说,它比空白剥离问题的任何解决方法都更简单(并且可能更快) - 并且它对引号进行编码,例如,如果您要在属性值中使用结果,这是必不可少的。
function htmlEscape(str) {
return str
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
// I needed the opposite function today, so adding here too:
function htmlUnescape(str){
return str
.replace(/"/g, '"')
.replace(/'/g, "'")
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&/g, '&');
}
2013 年 6 月 17 日更新:在寻找最快的转义过程中,我发现了一种replaceAll
方法的实现:
http
: //dumpsite.com/forum/index.php?topic=4.msg29# msg29(此处也引用:最快替换字符串中字符的所有实例的方法)
这里的一些性能结果:http :
//jsperf.com/htmlencoderegex/25
它为replace
上面的内置链提供相同的结果字符串。如果有人能解释为什么它更快,我会很高兴!?
2015-03-04 更新:
我刚刚注意到 AngularJS 正在使用上面的方法:https :
//github.com/angular/angular.js/blob/v1.3.14/src/ngSanitize/sanitize.js#L435
他们添加了一些改进 - 他们似乎正在处理一个模糊的 Unicode 问题,并将所有非字母数字字符转换为实体。我的印象是,只要您为文档指定了 UTF8 字符集,就不需要后者。
我会注意到(4 年后)Django 仍然没有做这些事情,所以我不确定它们有多重要:https :
//github.com/django/django/blob/1.8b1/django/utils /html.py#L44
2016 年 4 月 6 日更新:
您可能还希望转义正斜杠/
。这不是正确的 HTML 编码所必需的,但是OWASP 建议将其作为反 XSS 安全措施。(感谢@JNF 在评论中提出这一点)
.replace(/\//g, '/');