我正在写一个Chrome扩展,涉及做以下工作的lot:通过将<
,>
和&
分别转换为<
,>
和&
,对可能包含HTML标签的字符串进行消毒。
(换句话说,与PHP的htmlspecialchars(str, ENT_NOQUOTES)
相同-我不认为有任何真正需要转换双引号字符。)
这是我到目前为止发现的最快的函数:
function safe_tags(str) {
return str.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>') ;
}
但是,当我必须一次运行几千个字符串时,仍然会有很大的滞后。
有人能改进这一点吗?它主要用于10到150个字符的字符串,如果有区别的话。
(我的一个想法是不必费心编码这个大于号的符号-这会有什么真正的危险吗?)
发布于 2011-03-31 20:26:45
您可以尝试传递一个回调函数来执行替换:
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方法进行比较。
你的方式看起来更快...
但是你为什么需要它呢?
发布于 2012-02-13 01:58:57
这里有一种你可以做到的方法:
var escape = document.createElement('textarea');
function escapeHTML(html) {
escape.textContent = html;
return escape.innerHTML;
}
function unescapeHTML(html) {
escape.innerHTML = html;
return escape.textContent;
}
发布于 2012-11-24 12:24:21
作为原型函数的Martijn方法:
String.prototype.escape = function() {
var tagsToReplace = {
'&': '&',
'<': '<',
'>': '>'
};
return this.replace(/[&<>]/g, function(tag) {
return tagsToReplace[tag] || tag;
});
};
var a = "<abc>";
var b = a.escape(); // "<abc>"
https://stackoverflow.com/questions/5499078
复制相似问题