我正在写一个Chrome扩展程序,包括做了 很多 以后的工作中:消毒的字符串 可能
包含HTML标签,通过转换<
,>
并&
以<
,>
和&
分别。
(换句话说,与PHP相同htmlspecialchars(str, ENT_NOQUOTES)
-我认为并不需要转换双引号字符。)
这是到目前为止我发现的最快的功能:
function safe_tags(str) {
return str.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>') ;
}
但是当我不得不一次性运行数千个字符串时,仍然存在很大的滞后。
任何人都可以对此进行改进吗?如果有所不同,则通常用于10到150个字符之间的字符串。
(我曾经想到的一个想法是不必费心编码大于号-这样会不会有真正的危险?)
您可以尝试传递回调函数来执行替换:
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方法进行比较。
你的方法似乎更快…
但是,为什么需要它?
本文向大家介绍JS实现HTML标签转义及反转义,包括了JS实现HTML标签转义及反转义的使用技巧和注意事项,需要的朋友参考一下 简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。 这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。 由于是纯前端操作,不涉及后端,因此需要通过js对输入内容进行转义。 这里提供一个非常简单有效的转义方案,
问题 你需要使用命名实体来替代 HTML 标签: <br/> => <br/> 解决方案 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编码器被认为是旧