当前位置: 首页 > 面试题库 >

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

段阳夏
2023-03-14
问题内容

我正在写一个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个字符之间的字符串。

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


问题答案:

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

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

你的方法似乎更快…

但是,为什么需要它?



 类似资料:
  • 本文向大家介绍JS实现HTML标签转义及反转义,包括了JS实现HTML标签转义及反转义的使用技巧和注意事项,需要的朋友参考一下 简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。 这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。 由于是纯前端操作,不涉及后端,因此需要通过js对输入内容进行转义。 这里提供一个非常简单有效的转义方案,

  • 问题 你需要使用命名实体来替代 HTML 标签: <br/> => &lt;br/&gt; 解决方案 htmlEncode = (str) -> str.replace /[&<>"']/g, ($0) -> "&" + {"&":"amp", "<":"lt", ">":"gt", '"':"quot", "'":"#39"}[$0] + ";" htmlEncode('<a hr

  • 问题内容: 由于HTML5中不推荐使用HTML中的标记(我理解为什么),有没有一种将某些属性和样式仅应用于段落文本 部分 的干净解决方案?我使用JavaScript来解析XML文件,该事实依赖于标签允许使用基于类的CSS格式化部分包装文本的事实。我意识到“ anchor”()标记也可以用于此目的,但是这种方式看起来非常落后且不自然。 编辑 当我问这个问题时(几年前),我未能理解每个DOM元素都属于

  • 问题内容: 我有一些XML文本希望在HTML页面中呈现。这段文字包含一个&符号,我想以其实体表示形式呈现。 如何在源XML中转义此“&”号?我试过了,但这被解码为实际的&字符(),在HTML中是无效的。 因此,我想以一种在使用XML输出的网页中进行呈现的方式对其进行转义。 问题答案: 当您的XML包含时,这将导致文本。 当您在HTML中使用该代码时,该代码将显示为。

  • 问题内容: 假设下面的字符串模板被赋予了Java Bean对象的列表: 即人员列表中可能包含您可能无法或无法增强/扩展的对象: 该和方法不返回消毒(编码的HTML实体)。您如何解决这个问题? 问题答案: 您可以使用自定义渲染器,例如: 然后在模板中指示您希望其转义: 也就是说,您可能更喜欢清理输入的数据,在发送到模板之前进行转换,将经过装饰的人发送到模板等。 输出:

  • 问题内容: 我有一些用户输入。在我的代码中,我确保对以下符号进行转义: OWASP指出还有更多的字符可以转义。 对于属性,我做了另一种转义: 这样可以确保所有属性都用“括起来。”这样就可以确定自己的html属性,而不是HTML本身。 问题答案: 我也使用OWASP(ESAPI)库,以转义不同显示类型的字符串,请使用: HTML(假设为jsp) 更新 ( 2017 ) 由于ESAPI编码器被认为是旧