这个小函数能否返回有效的HTML?
function HtmlSanitizer(text) {
return text.replace(/&(?!\s)|</g, function (s) { if(s == '&') return '&'; else return '<'});
}
编辑:此功能的目标是避免html注入。这就是我要问的原因。
答案 0 :(得分:1)
该函数仅返回您可能想要编码为HTML实体的一小部分内容。因此,我会说你的问题的答案是“不”。
您可能希望Google搜索“javascript html entity encode”之类的内容或类似功能,以便找到更完整的内容。
答案 1 :(得分:1)
这是一个正则表达式:
/ /g
=全局替换,即替换text
字符串&
=匹配文本中的&符号,因为它不是JS Regex中的保留字符(?!)
=“负向前瞻”搜索(不要与?
独立使用非贪婪搜索相混淆。\s
=匹配任何空格字符|<
=如果它与&符号不匹配,它将尝试捕捉开口角度支撑然后它将捕获字符串并将其传递给回调函数,并将&
替换为&
,将<
替换为<
。这是对字符串进行HTML编码的基本方法,但在我看来它并不健全。
SGML(及其派生词:HTML和XML)更喜欢语法字符被完全编码,因此每次出现的amperstand,开始和结束括号和引号都应该被编码,而你提供的函数只会执行其中的两个(授予,那两个是最重要的)。
我建议您阅读此条目:HTML-encoding lost when attribute read from input field