【发布时间】:2011-07-26 19:48:26
【问题描述】:
我正在编写一个 Chrome 扩展程序,其中涉及执行 很多 以下工作:通过转换 <、@987654322 来清理 可能 包含 HTML 标记的字符串@ 和& 分别为<、> 和&。
(换句话说,与 PHP 的 htmlspecialchars(str, ENT_NOQUOTES) 相同——我认为没有任何真正需要转换双引号字符。)
这是迄今为止我发现的最快的函数:
function safe_tags(str) {
return str.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>') ;
}
但是当我必须一次运行几千个字符串时仍然存在很大的延迟。
有人可以改进吗?它主要用于 10 到 150 个字符之间的字符串,如果这有所不同的话。
(我的一个想法是不要费心编码大于号——这样做会有什么真正的危险吗?)
【问题讨论】:
-
为什么?在大多数情况下,您想要这样做,您希望将数据插入 DOM,在这种情况下,您应该忘记转义它,只需从中创建一个 textNode。
-
@David Dorward:也许他想清理 POST 数据,而服务器没有正确地往返数据。
-
@Lie — 如果是这样,那么解决方案是“看在 Pete 的份上,修复服务器,因为你有一个很大的 XSS 漏洞”
-
@David Dorward:有可能是他无法控制服务器。我最近遇到了这样的情况,我正在编写一个greasemonkey 脚本来解决我在大学网站上不喜欢的一些事情;我必须在我无法控制的服务器上进行 POST 并使用 javascript 清理 POST 数据(因为原始数据来自富文本框,因此有大量 html 标签在服务器上不进行往返) .网络管理员无视我要求他们修复网站的请求,所以我别无选择。
-
我有一个用例,我需要在 div 中显示错误消息。错误消息可以包含 HTML 和换行符。我想转义 HTML 并用
替换换行符。然后把结果放到一个div中展示。
标签: javascript html regex performance string