首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将HTML标记转义为HTML实体的最快方法?

将HTML标记转义为HTML实体的最快方法?
EN

Stack Overflow用户
提问于 2011-03-31 19:28:27
回答 12查看 156.7K关注 0票数 105

我正在写一个Chrome扩展,涉及做以下工作的lot:通过将<>&分别转换为&lt;&gt;&amp;,对可能包含HTML标签的字符串进行消毒。

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

这是我到目前为止发现的最快的函数:

代码语言:javascript
复制
function safe_tags(str) {
    return str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;') ;
}

但是,当我必须一次运行几千个字符串时,仍然会有很大的滞后。

有人能改进这一点吗?它主要用于10到150个字符的字符串,如果有区别的话。

(我的一个想法是不必费心编码这个大于号的符号-这会有什么真正的危险吗?)

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2011-03-31 20:26:45

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

代码语言:javascript
复制
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方法进行比较。

你的方式看起来更快...

但是你为什么需要它呢?

票数 91
EN

Stack Overflow用户

发布于 2012-02-13 01:58:57

这里有一种你可以做到的方法:

代码语言:javascript
复制
var escape = document.createElement('textarea');
function escapeHTML(html) {
    escape.textContent = html;
    return escape.innerHTML;
}

function unescapeHTML(html) {
    escape.innerHTML = html;
    return escape.textContent;
}

Here's a demo.

票数 114
EN

Stack Overflow用户

发布于 2012-11-24 12:24:21

作为原型函数的Martijn方法:

代码语言:javascript
复制
String.prototype.escape = function() {
    var tagsToReplace = {
        '&': '&amp;',
        '<': '&lt;',
        '>': '&gt;'
    };
    return this.replace(/[&<>]/g, function(tag) {
        return tagsToReplace[tag] || tag;
    });
};

var a = "<abc>";
var b = a.escape(); // "&lt;abc&gt;"
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5499078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档