这个功能可以清理HTML吗?

时间:2012-11-30 01:06:07

标签: javascript

这个小函数能否返回有效的HTML?

function HtmlSanitizer(text) {
    return text.replace(/&(?!\s)|</g, function (s) { if(s == '&') return '&amp;'; else return '&lt;'});
}

编辑:此功能的目标是避免html注入。这就是我要问的原因。

2 个答案:

答案 0 :(得分:1)

该函数仅返回您可能想要编码为HTML实体的一小部分内容。因此,我会说你的问题的答案是“不”。

您可能希望Google搜索“javascript html entity encode”之类的内容或类似功能,以便找到更完整的内容。

答案 1 :(得分:1)

这是一个正则表达式:

  • / /g =全局替换,即替换text字符串
  • 中的所有匹配项
  • & =匹配文本中的&符号,因为它不是JS Regex中的保留字符
  • (?!) =“负向前瞻”搜索(不要与?独立使用非贪婪搜索相混淆。
  • \s =匹配任何空格字符
  • |< =如果它与&符号不匹配,它将尝试捕捉开口角度支撑

然后它将捕获字符串并将其传递给回调函数,并将&替换为&amp;,将<替换为&lt;。这是对字符串进行HTML编码的基本方法,但在我看来它并不健全。

SGML(及其派生词:HTML和XML)更喜欢语法字符被完全编码,因此每次出现的amperstand,开始和结束括号和引号都应该被编码,而你提供的函数只会执行其中的两个(授予,那两个是最重要的)。

我建议您阅读此条目:HTML-encoding lost when attribute read from input field