一尘不染

将HTML标签作为HTML实体转义的最快方法?

javascript

我正在写一个Chrome扩展程序,包括做了 很多 以后的工作中:消毒的字符串 可能
包含HTML标签,通过转换<>&&lt;&gt;&amp;分别。

(换句话说,与PHP相同htmlspecialchars(str, ENT_NOQUOTES)-我认为并不需要转换双引号字符。)

这是到目前为止我发现的最快的功能:

function safe_tags(str) {
    return str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;') ;
}

但是当我不得不一次性运行数千个字符串时,仍然存在很大的滞后。

任何人都可以对此进行改进吗?如果有所不同,则通常用于10到150个字符之间的字符串。

(我曾经想到的一个想法是不必费心编码大于号-这样会不会有真正的危险?)


阅读 240

收藏
2020-04-25

共1个答案

一尘不染

您可以尝试传递回调函数来执行替换:

var tagsToReplace = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;'
};

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方法进行比较。

你的方法似乎更快…

但是,为什么需要它?

2020-04-25