我正在写一个Chrome扩展程序,包括做了 很多 以后的工作中:消毒的字符串 可能 包含HTML标签,通过转换<,>并&以<,>和&分别。
<
>
&
<
>
&
(换句话说,与PHP相同htmlspecialchars(str, ENT_NOQUOTES)-我认为并不需要转换双引号字符。)
htmlspecialchars(str, ENT_NOQUOTES)
这是到目前为止我发现的最快的功能:
function safe_tags(str) { return str.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>') ; }
但是当我不得不一次性运行数千个字符串时,仍然存在很大的滞后。
任何人都可以对此进行改进吗?如果有所不同,则通常用于10到150个字符之间的字符串。
(我曾经想到的一个想法是不必费心编码大于号-这样会不会有真正的危险?)
您可以尝试传递回调函数来执行替换:
var tagsToReplace = { '&': '&', '<': '<', '>': '>' }; function replaceTag(tag) { return tagsToReplace[tag] || tag; } function safe_tags_replace(str) { return str.replace(/[&<>]/g, replaceTag); }
这是一个性能测试:http : //jsperf.com/encode-html-entities,用于与replace重复调用该函数以及使用Dmitrij提出的DOM方法进行比较。
replace
你的方法似乎更快…
但是,为什么需要它?