我正在编写一个Chrome扩展,它涉及执行lot项以下工作:通过将<>&分别转换为&lt;&gt;&amp;,对包含HTML标签的might字符串进行清理.

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

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

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

但是,当我必须一次通过几千个字符串时,仍然有很大的延迟.

有人能改进吗?如果有区别的话,它主要用于10到150个字符之间的字符串.

(我的一个 idea 是,不必费心对大于号进行编码-这会有什么真正的危险吗?)

推荐答案

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

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

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

但你为什么需要它?

Html相关问答推荐

如何使文本从按钮中心生长?

我已经在我的网站上创建了按钮,但我不能让它们正确排列.'

CSS自定义特性中的URL是否可以相对于定义的CSS文件?

如何修复与导航栏重叠的css网格?

如何在元素的三条边中间换行边框?

如何使用CSS在NSAttributedString中为HTML文本中的图像制作覆盖图

有没有办法根据另一个项目调整FlexBox项目的大小?

水平卷轴的内容保持堆叠

如何使用Reaction Js读取html文件中的代码

HTMLTag属性内的svelte+TS类型声明

如何防止弹性项目溢出容器?

30000ms后超时重试:期望找到元素:someElement,但从未找到它

Swift 以编程方式在 YouTube 嵌入视频中进入全屏

排列卡片时遇到困难

将组件移动到页面底部 Angular

如何在div中设计伪元素?

增加第一个字母的大小不再正确居中文本

Mediawiki css/html 信息框创建空白行

防止 HTML 表格在 Quarto 中使用全页宽度

使用 tailwind css 将 HTML/CSS/JS 站点转换为 React App