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

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

我正在编写一个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个字符之间的字符串,如果这有区别的话。

(我的一个想法是,不要费心去编码比符号更大的东西-这样做会有什么真正的危险吗?)


开满天机
浏览 604回答 3
3回答

呼啦一阵风

这里有一种你可以做到的方法:var&nbsp;escape&nbsp;=&nbsp;document.createElement('textarea');function&nbsp;escapeHTML(html)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;escape.textContent&nbsp;=&nbsp;html; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;escape.innerHTML;}function&nbsp;unescapeHTML(html)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;escape.innerHTML&nbsp;=&nbsp;html; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;escape.textContent;}这是一个演示。

POPMUISE

Martijn的方法作为一个原型函数:String.prototype.escape&nbsp;=&nbsp;function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tagsToReplace&nbsp;=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&':&nbsp;'&amp;', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<':&nbsp;'&lt;', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'>':&nbsp;'&gt;' &nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.replace(/[&<>]/g,&nbsp;function(tag)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;tagsToReplace[tag]&nbsp;||&nbsp;tag; &nbsp;&nbsp;&nbsp;&nbsp;});};var&nbsp;a&nbsp;=&nbsp;"<abc>";var&nbsp;b&nbsp;=&nbsp;a.escape();&nbsp;//&nbsp;"&lt;abc&gt;"
打开App,查看更多内容
随时随地看视频慕课网APP