0

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

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

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

4

2 回答 2

1

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

您可能希望 Google 搜索“javascript html 实体编码”或类似内容以找到更完整的内容。

于 2012-11-30T01:15:56.867 回答
1

这是一个正则表达式:

  • / /gtext= 全局替换,即替换字符串中所有出现的地方
  • &= 匹配文本中的和号,因为它不是 JS Regex 中的保留字符
  • (?!)?=“负前瞻”搜索(不要与非贪婪搜索的独立使用混淆。
  • \s= 匹配任何空白字符
  • |<= 如果它不匹配一个 & 符号,它会尝试捕捉一个开口角括号

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

SGML(及其派生词:HTML 和 XML)更喜欢对句法字符进行完全编码,因此每次出现的符号、左括号和右括号以及引号都应该进行编码,而您提供的函数仅执行其中两件事(当然,这两个是最重要的)。

我推荐阅读这篇文章:HTML-encoding lost when attribute read from input field

于 2012-11-30T01:17:22.043 回答