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