使用 jQuery 转义 HTML 字符串

Escaping HTML strings with jQuery

提问人:Page 提问时间:8/24/2008 最后编辑:Matt FenwickPage 更新时间:1/12/2022 访问量:766600

问:

有谁知道一种简单的方法可以从jQuery中的字符串中转义HTML?我需要能够传递任意字符串并使其正确转义以显示在 HTML 页面中(防止 JavaScript/HTML 注入攻击)。我确信可以扩展jQuery来做到这一点,但我目前对框架的了解还不够,无法做到这一点。

JavaScript jQuery 字符串 转义

评论

0赞 Christophe Roussy 10/27/2015
另请参阅 perf: jsperf.com/...

答:

61赞 tghw 8/24/2008 #1

如果你要转义 HTML,我能想到的只有三个是真正必要的:

html.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");

根据您的用例,您可能还需要执行以下操作: .如果列表足够大,我只会使用一个数组:"&quot;

var escaped = html;
var findReplace = [[/&/g, "&amp;"], [/</g, "&lt;"], [/>/g, "&gt;"], [/"/g, "&quot;"]]
for(var item in findReplace)
    escaped = escaped.replace(findReplace[item][0], findReplace[item][1]);

encodeURIComponent()只会对 URL 进行转义,而对 HTML 不进行转义。

评论

14赞 Ryan 11/8/2010
如果所讨论的 HTML 已经具有转义实体,则此正则表达式将产生奇怪的结果。例如,转义“Tom &Jerry》将制作《Tom &放大 器;杰瑞”
12赞 Marcel Korpel 3/17/2011
请使用本地申报;无论如何,在循环遍历数组时根本不使用循环!请改用普通循环。哦,是,不是.varitemfor … inforencodeURIComponentescapeURIComponent
3赞 geofflee 3/24/2011
如果您正在使用标记属性,则还需要转义引号和/或双引号。htmlspecialchars 的 PHP 文档包含它执行的转换的有用列表。php.net/htmlspecialchars
4赞 LoganWolfer 4/2/2011
只是对新人的善意提醒,如果您打算在网站上的某个地方使用非英语字符,请不要使用它......显然,这是行不通的,因为带有“é”等重音的字符:;以下是 html 实体的列表,供参考:w3schools.com/tags/ref_entities.asp&eacute
13赞 mklement0 4/12/2013
@Ryan:虽然值得指出的是,此解决方案无法正确处理已编码的字符串,但同样适用于此页面上的大多数(可能是所有)解决方案也毫无价值。
486赞 travis 8/25/2008 #2

由于您使用的是 jQuery,因此只需设置元素的 text 属性:

// before:
// <div class="someClass">text</div>
var someHtmlString = "<script>alert('hi!');</script>";

// set a DIV's text:
$("div.someClass").text(someHtmlString);
// after: 
// <div class="someClass">&lt;script&gt;alert('hi!');&lt;/script&gt;</div>

// get the text in a string:
var escaped = $("<div>").text(someHtmlString).html();
// value: 
// &lt;script&gt;alert('hi!');&lt;/script&gt;

评论

1赞 paaacman 1/18/2022
安全吗?linkedin.com/pulse/......
0赞 travis 1/20/2022
@paaacman使用 or 使用 jQuery 设置属性是安全的,但像该示例中那样构建 HTML 字符串肯定会遇到问题。.text().attr()
185赞 Henrik N 12/17/2008 #3
$('<div/>').text('This is fun & stuff').html(); // "This is fun &amp; stuff"

来源:http://debuggable.com/posts/encode-html-entities-with-jquery:480f4dd6-13cc-4ce9-8071-4710cbdd56cb

评论

12赞 geofflee 3/24/2011
如上文所述,此解决方案不能保证保留空格。
5赞 Wayne 5/22/2011 #4

如果你要走正则表达式路线,上面的 tghw 示例中有一个错误。

<!-- WON'T WORK -  item[0] is an index, not an item -->

var escaped = html; 
var findReplace = [[/&/g, "&amp;"], [/</g, "&lt;"], [/>/g,"&gt;"], [/"/g,
"&quot;"]]

for(var item in findReplace) {
     escaped = escaped.replace(item[0], item[1]);   
}


<!-- WORKS - findReplace[item[]] correctly references contents -->

var escaped = html;
var findReplace = [[/&/g, "&amp;"], [/</g, "&lt;"], [/>/g, "&gt;"], [/"/g, "&quot;"]]

for(var item in findReplace) {
     escaped = escaped.replace(findReplace[item[0]], findReplace[item[1]]);
}

评论

2赞 Chris Stephens 6/24/2011
我相信它应该是for(var item in findReplace) { escaped = escaped.replace(findReplace[item][0], findReplace[item][1]);
18赞 NicolasBernier 5/25/2012 #5

escape()并且旨在对 URL 的字符串进行编码/解码,而不是 HTML。unescape()

实际上,我使用以下代码片段来执行不需要任何框架的技巧:

var escapedHtml = html.replace(/&/g, '&amp;')
                      .replace(/>/g, '&gt;')
                      .replace(/</g, '&lt;')
                      .replace(/"/g, '&quot;')
                      .replace(/'/g, '&apos;');

评论

0赞 Marius 7/12/2013
如果你要有 s,那么你至少需要添加 和 '' 到战斗中。只有 html 元素中的字符串标记数据才真正需要这些。对于 html 数据本身(外部标签),只需要前 3 个。"'
32赞 intrepidis 5/31/2012 #6

这是一个干净、清晰的 JavaScript 函数。它会将诸如“少数<许多”之类的文本转义为“少数<很多”。

function escapeHtmlEntities (str) {
  if (typeof jQuery !== 'undefined') {
    // Create an empty div to use as a container,
    // then put the raw text in and get the HTML
    // equivalent out.
    return jQuery('<div/>').text(str).html();
  }

  // No jQuery, so use string replace.
  return str
    .replace(/&/g, '&amp;')
    .replace(/>/g, '&gt;')
    .replace(/</g, '&lt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&apos;');
}
0赞 Katharapu Ramana 6/27/2012 #7
function htmlEscape(str) {
    var stringval="";
    $.each(str, function (i, element) {
        alert(element);
        stringval += element
            .replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;')
            .replace(' ', '-')
            .replace('?', '-')
            .replace(':', '-')
            .replace('|', '-')
            .replace('.', '-');
    });
    alert(stringval);
    return String(stringval);
}
24赞 Nikita Koksharov 8/20/2012 #8

试试Underscore.string lib,它适用于jQuery。

_.str.escapeHTML('<div>Blah blah blah</div>')

输出:

'&lt;div&gt;Blah blah blah&lt;/div&gt;'

评论

20赞 codeape 10/11/2012
主下划线库现在具有实用函数。_.escape()
662赞 Tom Gruner 8/20/2012 #9

还有来自 mustache.js 的解决方案

var entityMap = {
  '&': '&amp;',
  '<': '&lt;',
  '>': '&gt;',
  '"': '&quot;',
  "'": '&#39;',
  '/': '&#x2F;',
  '`': '&#x60;',
  '=': '&#x3D;'
};

function escapeHtml (string) {
  return String(string).replace(/[&<>"'`=\/]/g, function (s) {
    return entityMap[s];
  });
}

评论

0赞 Tony Patino 1/29/2022
很抱歉打扰,但无论如何,这都可以逆转吗?我不知道正则表达式,所以我需要帮助
0赞 spy 12/11/2022
如果对此进行单元测试会很方便,但这似乎是一个更好的解决方案
0赞 Travis Bemrose 2/10/2023
如果字符串已经转义了怎么办?此表达式匹配,除非后跟 ( 1-8 个字母后跟 0-2 位数字或后跟 1-4(十进制或十六进制)数字 ),后跟 。模式: 用途: 结果: 在 DOM 中: 页面显示:&#;/([<>"'`=\/]|&(?!([a-zA-Z]{1,8}\d{0,2}|#(\d{1,4}|x[a-zA-Z\d]{1,4}));))/gescapeHtml('&quot;This&quot;&#9;&#x3D;&#x9;a &v3ry; &dumb; quote.')'&quot;This&quot;&#9;&#x3D;&#x9;a &amp;v3ry; &dumb; quote.''"This"\t=\ta &amp;v3ry; &amp;dumb; quote.'"This" = a &v3ry; &dumb; quote.
-2赞 Cees Timmerman 9/18/2012 #10

这个答案提供了 jQuery 和普通的 JS 方法,但在不使用 DOM 的情况下这是最短的:

unescape(escape("It's > 20% less complicated this way."))

转义字符串:It%27s%20%3E%2020%25%20less%20complicated%20this%20way.

如果转义空格困扰您,请尝试:

unescape(escape("It's > 20% less complicated this way.").replace(/%20/g, " "))

转义字符串:It%27s %3E 20%25 less complicated this way.

不幸的是,该函数在 JavaScript 版本 1.5 中已弃用。 或者是替代方案,但它们忽略了 ,因此最后一行代码将变成这样:escape()encodeURI()encodeURIComponent()'

decodeURI(encodeURI("It's > 20% less complicated this way.").replace(/%20/g, " ").replace("'", '%27'))

所有主流浏览器仍然支持短代码,考虑到旧网站的数量,我怀疑这种情况很快就会改变。

评论

0赞 thelem 10/15/2015
这用于 URL 编码。问题是关于HTML转义的,这是非常不同的。
0赞 Cees Timmerman 10/15/2015
@thelem,如果字符串嵌入在 HTML 中嵌入的 JavaScript 数组中,则不是,但我同意这是关于纯 HTML 转义的,因此它可以立即显示为文本。
5赞 amrp 10/31/2012 #11

这是一个很好的安全例子......

function escapeHtml(str) {
    if (typeof(str) == "string"){
        try{
            var newStr = "";
            var nextCode = 0;
            for (var i = 0;i < str.length;i++){
                nextCode = str.charCodeAt(i);
                if (nextCode > 0 && nextCode < 128){
                    newStr += "&#"+nextCode+";";
                }
                else{
                    newStr += "?";
                }
             }
             return newStr;
        }
        catch(err){
        }
    }
    else{
        return str;
    }
}

评论

4赞 Stefan Majewsky 11/17/2012
您在那里抑制了哪些类型的异常?
39赞 zrajm 11/14/2012 #12

我写了一个小函数来做到这一点。它只逃脱 、 和 (但通常这就是你所需要的)。它比之前提出的解决方案稍微优雅一些,因为它只使用一个来完成所有转换。(编辑 2:降低了代码复杂性,使函数更小、更整洁,如果您对原始代码感到好奇,请参阅本答案的结尾。"&<>.replace()

function escapeHtml(text) {
    'use strict';
    return text.replace(/[\"&<>]/g, function (a) {
        return { '"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;' }[a];
    });
}

这是普通的 Javascript,没有使用 jQuery。

逃避和太/'

根据 mklement 的评论进行编辑。

上述功能可以很容易地扩展为包含任何字符。要指定更多要转义的字符,只需将它们插入正则表达式的字符类中(即在 中)和作为对象中的条目。(编辑2:以同样的方式缩短了此功能。/[...]/gchr

function escapeHtml(text) {
    'use strict';
    return text.replace(/[\"&'\/<>]/g, function (a) {
        return {
            '"': '&quot;', '&': '&amp;', "'": '&#39;',
            '/': '&#47;',  '<': '&lt;',  '>': '&gt;'
        }[a];
    });
}

请注意上面的 for 撇号用法(符号实体可能已被改用 - 它是在 XML 中定义的,但最初不包含在 HTML 规范中,因此可能并非所有浏览器都支持。请参阅:维基百科上关于HTML字符编码的文章)。我还记得在某处读到,使用十进制实体比使用十六进制实体更广泛地得到支持,但我现在似乎找不到它的来源。(而且不可能有很多浏览器不支持十六进制实体。&#39;&apos;

注意:在转义字符列表中添加 and 并不是那么有用,因为它们在 HTML 中没有任何特殊含义,也不需要转义。/'

独创功能escapeHtml

编辑2:原始函数使用变量 () 来存储回调所需的对象。这个变量还需要一个额外的匿名函数来限定它的作用,使函数(不必要地)更大、更复杂。chr.replace()

var escapeHtml = (function () {
    'use strict';
    var chr = { '"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;' };
    return function (text) {
        return text.replace(/[\"&<>]/g, function (a) { return chr[a]; });
    };
}());

我还没有测试过两个版本中哪个更快。如果您这样做,请随时在此处添加有关它的信息和链接。

15赞 Jeena 11/22/2012 #13

我增强了 mustache.js 示例,将方法添加到字符串对象。escapeHTML()

var __entityMap = {
    "&": "&amp;",
    "<": "&lt;",
    ">": "&gt;",
    '"': '&quot;',
    "'": '&#39;',
    "/": '&#x2F;'
};

String.prototype.escapeHTML = function() {
    return String(this).replace(/[&<>"'\/]/g, function (s) {
        return __entityMap[s];
    });
}

这样就很容易使用了"Some <text>, more Text&Text".escapeHTML()

评论

0赞 FlameStorm 8/9/2017
有用,但我也进入了函数本地范围。并将所有这些包装成__entityMapif (typeof String.prototype.escapeHTML !== 'function'){...}
2赞 Gheljenor 5/13/2013 #14
(function(undefined){
    var charsToReplace = {
        '&': '&amp;',
        '<': '&lt;',
        '>': '&gt;'
    };

    var replaceReg = new RegExp("[" + Object.keys(charsToReplace).join("") + "]", "g");
    var replaceFn = function(tag){ return charsToReplace[tag] || tag; };

    var replaceRegF = function(replaceMap) {
        return (new RegExp("[" + Object.keys(charsToReplace).concat(Object.keys(replaceMap)).join("") + "]", "gi"));
    };
    var replaceFnF = function(replaceMap) {
        return function(tag){ return replaceMap[tag] || charsToReplace[tag] || tag; };
    };

    String.prototype.htmlEscape = function(replaceMap) {
        if (replaceMap === undefined) return this.replace(replaceReg, replaceFn);
        return this.replace(replaceRegF(replaceMap), replaceFnF(replaceMap));
    };
})();

没有全局变量,一些内存优化。 用法:

"some<tag>and&symbol©".htmlEscape({'©': '&copy;'})

结果是:

"some&lt;tag&gt;and&amp;symbol&copy;"
1赞 d-_-b 6/3/2013 #15
function htmlDecode(t){
   if (t) return $('<div />').html(t).text();
}

像魅力一样工作

评论

0赞 Bass Jobsen 8/9/2013
text 删除了 html 标签,但 $('<div />').html(t).html();工程
32赞 Saram 7/9/2013 #16

经过上次测试,我可以推荐最快且完全跨浏览器兼容的原生 javaScript(DOM)解决方案:

function HTMLescape(html){
    return document.createElement('div')
        .appendChild(document.createTextNode(html))
        .parentNode
        .innerHTML
}

如果你重复很多次,你可以用准备好的变量来做:

//prepare variables
var DOMtext = document.createTextNode("test");
var DOMnative = document.createElement("span");
DOMnative.appendChild(DOMtext);

//main work for each case
function HTMLescape(html){
  DOMtext.nodeValue = html;
  return DOMnative.innerHTML
}

看看我的最终性能比较堆栈问题)。

评论

2赞 Dan Dascalescu 8/13/2015
是否有必要使用两个节点?就一个怎么样:var p = document.createElement('p'); p.textContent = html; return p.innerHTML;
2赞 zb226 11/11/2015
@DanDascalescu:根据 MDN 的说法,该功能仅支持 Chrome 1+、Firefox 2、IE9、Opera 9.64 和 Safari 3(后两者注释为“可能更早”)。因此,它将打破 OP 的“完全跨浏览器兼容”的说法。textContent
0赞 Bekim Bacaj 11/27/2016
p.innerText = html; return p.innerHTML
42赞 chovy 9/12/2013 #17

易于使用的下划线:

_.escape(string) 

Underscore 是一个实用程序库,它提供了许多原生 js 不提供的功能。还有 lodash,它与下划线的 API 相同,但被重写以提高性能。

评论

2赞 qräbnö 1/22/2021
反之亦然._.unescape(string)
11赞 ronnbot 9/5/2014 #18

如果您有下划线.js,请使用(比上面发布的jQuery方法更有效):_.escape

_.escape('Curly, Larry & Moe'); // returns: Curly, Larry &amp; Moe
3赞 raam86 1/30/2015 #19

你可以用 vanilla js 轻松做到这一点。

只需在文档中添加一个文本节点即可。 它将被浏览器转义。

var escaped = document.createTextNode("<HTML TO/ESCAPE/>")
document.getElementById("[PARENT_NODE]").appendChild(escaped)
-3赞 Kauê Gimenes 3/7/2015 #20

如果要将此信息保存在数据库中,则使用客户端脚本转义 HTML 是错误的,则应在服务器中完成此操作。否则很容易绕过您的 XSS 保护。

为了阐明我的观点,这里有一个使用答案之一的例子:

假设您正在使用函数 escapeHtml 从博客中的评论中转义 Html,然后将其发布到您的服务器。

var entityMap = {
    "&": "&amp;",
    "<": "&lt;",
    ">": "&gt;",
    '"': '&quot;',
    "'": '&#39;',
    "/": '&#x2F;'
  };

  function escapeHtml(string) {
    return String(string).replace(/[&<>"'\/]/g, function (s) {
      return entityMap[s];
    });
  }

用户可以:

  • 编辑 POST 请求参数,并将注释替换为 javascript 代码。
  • 使用浏览器控制台覆盖 escapeHtml 函数。

如果用户将此代码片段粘贴到控制台中,它将绕过 XSS 验证:

function escapeHtml(string){
   return string
}

评论

0赞 ItalyPaleAle 3/14/2015
我不同意。要绕过这种 XSS 保护,您必须使用 XSS 攻击(注入禁用转义的脚本),这是您实际阻止的。在某些情况下,在客户端上转义实际上更合适,例如,如果数据来自必须返回标准 JSON 的 REST API。
0赞 Kauê Gimenes 3/14/2015
@Qualcuno 如果您在客户端中执行此验证并将此信息发布到服务器,并且信任它已通过验证,则用户只需编辑请求,脚本将保存在数据库中。
0赞 Kauê Gimenes 3/14/2015
@Qualcuno我列举了一些例子来更清楚地说明我的观点。
1赞 ItalyPaleAle 3/14/2015
问题是关于转义从服务器接收的字符串以在浏览器上显示它们。你说的是在将字符串提交到服务器之前对字符串进行转义,这是另一回事(尽管你是对的,而且它又回到了旧规则,永远不要盲目接受来自客户端的任何输入)
0赞 Kauê Gimenes 3/14/2015
@Qualcuno 这是 Stackoverflow 中一个热门问题,我相信这是一个需要涵盖的重要点。这就是我回答的原因。
-2赞 C Nimmanant 5/27/2015 #21

如果你不防止再次逃逸,所有解决方案都是无用的,例如,大多数解决方案会一直逃逸到 .&&amp;

escapeHtml = function (s) {
    return s ? s.replace(
        /[&<>'"]/g,
        function (c, offset, str) {
            if (c === "&") {
                var substr = str.substring(offset, offset + 6);
                if (/&(amp|lt|gt|apos|quot);/.test(substr)) {
                    // already escaped, do not re-escape
                    return c;
                }
            }
            return "&" + {
                "&": "amp",
                "<": "lt",
                ">": "gt",
                "'": "apos",
                '"': "quot"
            }[c] + ";";
        }
    ) : "";
};

评论

4赞 thelem 10/15/2015
这称为双重转义,应通过确保输入数据尚未转义来解决。如果你想从字面上展示<给用户?或者,也许文本将在其他地方重复使用,并取决于是否发生了逃逸?
3赞 Dave Brown 7/26/2015 #22

2 个不需要 JQUERY 的简单方法...

您可以像这样对字符串中的所有字符进行编码

function encode(e){return e.replace(/[^]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}

或者只是针对主要角色担心,换行符,,&<>"'

function encode(r){
return r.replace(/[\x26\x0A\<>'"]/g,function(r){return"&#"+r.charCodeAt(0)+";"})
}

var myString='Encode HTML entities!\n"Safe" escape <script></'+'script> & other tags!';

test.value=encode(myString);

testing.innerHTML=encode(myString);

/*************
* \x26 is &ampersand (it has to be first),
* \x0A is newline,
*************/
<p><b>What JavaScript Generated:</b></p>

<textarea id=test rows="3" cols="55"></textarea>

<p><b>What It Renders Too In HTML:</b></p>

<div id="testing">www.WHAK.com</div>

37赞 Adam Leggett 3/2/2016 #23

我意识到我参加这个聚会有多晚,但我有一个非常简单的解决方案,不需要jQuery。

escaped = new Option(unescaped).innerHTML;

编辑:这不会转义引号。需要转义引号的唯一情况是,如果内容将内联粘贴到 HTML 字符串中的属性中。我很难想象这样做会是好的设计。

编辑3:要获得最快的解决方案,请查看Saram上面的答案。这个是最短的。

3赞 iamandrewluca 10/11/2017 #24

纯 JavaScript 转义示例:

function escapeHtml(text) {
    var div = document.createElement('div');
    div.innerText = text;
    return div.innerHTML;
}

escapeHtml("<script>alert('hi!');</script>")
// "&lt;script&gt;alert('hi!');&lt;/script&gt;"

评论

3赞 FluffyKitten 10/11/2017
不鼓励使用纯代码答案,因为它们没有解释如何解决问题。请更新您的答案,以解释这如何改进此问题已经具有的其他已接受和赞成的答案。此外,这个问题已经有 9 年的历史了,最近有未回答问题的用户会更欣赏您的努力。请查看如何写一个好的答案
1赞 db306 11/13/2017
@FluffyKitten这是一篇关于此类功能的优缺点的非常好的博客文章,详细解释了您想知道的一切:)shebang.brandonmintern.com/......
0赞 FluffyKitten 11/14/2017
@db306 答案被标记为低质量,因为纯代码答案不符合 Stack Overflow 准则 - 请参阅如何编写一个好的答案。我的评论是在审查过程中添加的,以解释改进它需要什么,即需要更新答案以解释代码的作用以及它如何改进现有答案。赞成票来自其他评论者,以认可这一点。在评论中添加外部链接仍然不符合 SO 准则。相反,安德鲁需要直接在他的答案中包含相关信息。
0赞 Brandon 4/25/2020
请注意,brandonmintern DOT com 已过期,现在已停放。新的shebang地址是 shebang.mintern.net/foolproof-html-escaping-in-javascript/。
3赞 chickens 9/16/2019 #25

ES6 一个衬里,用于小胡子.js的解决方案

const escapeHTML = str => (str+'').replace(/[&<>"'`=\/]/g, s => ({'&': '&amp;','<': '&lt;','>': '&gt;','"': '&quot;',"'": '&#39;','/': '&#x2F;','`': '&#x60;','=': '&#x3D;'})[s]);
0赞 Christian d'Heureuse 12/27/2020 #26

速度优化版本:

function escapeHtml(s) {
   let out = "";
   let p2 = 0;
   for (let p = 0; p < s.length; p++) {
      let r;
      switch (s.charCodeAt(p)) {
         case 34: r = "&quot;"; break;  // "
         case 38: r = "&amp;" ; break;  // &
         case 39: r = "&#39;" ; break;  // '
         case 60: r = '&lt;'  ; break;  // <
         case 62: r = '&gt;'  ; break;  // >
         default: continue;
      }
      if (p2 < p) {
         out += s.substring(p2, p);
      }
      out += r;
      p2 = p + 1;
   }
   if (p2 == 0) {
      return s;
   }
   if (p2 < s.length) {
      out += s.substring(p2);
   }
   return out;
}

const s = "Hello <World>!";
document.write(escapeHtml(s));
console.log(escapeHtml(s));

0赞 oscar castellon 1/12/2022 #27

用于转义 html 特殊 (UTF-8)

function htmlEscape(str) {
  return str
      .replace(/&/g, '&amp;')
      .replace(/"/g, '&quot;')
      .replace(/'/g, '&#39;')
      .replace(/</g, '&lt;')
      .replace(/>/g, '&gt;')
      .replace(/\//g, '&#x2F;')
      .replace(/=/g,  '&#x3D;')
      .replace(/`/g, '&#x60;');
}

对于 unescape html 特殊 (UTF-8)

function htmlUnescape(str) {
  return str
      .replace(/&amp;/g, '&')
      .replace(/&quot;/g, '"')
      .replace(/&#39;/g, "'")
      .replace(/&lt;/g, '<')
      .replace(/&gt;/g, '>')
      .replace(/&#x2F/g, '/')
      .replace(/&#x3D;/g, '=')
      .replace(/&#x60;/g, '`');
}