解码HTML实体的简单JavaScript方法适用于浏览器和节点

Hen*_* He 7 html javascript decode node.js

如何解码HTML实体喜欢  '它的原始角色?

在浏览器中,我们可以创建一个DOM来完成这个技巧(参见这里),或者我们可以像他一样使用一些库

在NodeJS中,我们可以使用一些第三方库,如html-entities

如果我们想使用纯JavaScript来完成这项工作怎么办?

stackoverflow中有许多类似的问题和有用的答案,但我找不到在浏览器和Node.js上都有效的方法.所以我想分享一下我的观点.

我在下面发表了我的意见.我希望它可以为某人提供帮助.:)

Hen*_* He 21

stackoverflow中有许多类似的问题和有用的答案,但我找不到在浏览器和Node.js上都有效的方法.所以我想分享一下我的观点.

对于html代码  < > ',甚至是中文字符.

我建议使用这个功能.(受其他一些答案的启发)

function decodeEntities(encodedString) {
    var translate_re = /&(nbsp|amp|quot|lt|gt);/g;
    var translate = {
        "nbsp":" ",
        "amp" : "&",
        "quot": "\"",
        "lt"  : "<",
        "gt"  : ">"
    };
    return encodedString.replace(translate_re, function(match, entity) {
        return translate[entity];
    }).replace(/&#(\d+);/gi, function(match, numStr) {
        var num = parseInt(numStr, 10);
        return String.fromCharCode(num);
    });
}
Run Code Online (Sandbox Code Playgroud)

该工具也适用于Node.js环境.

decodeEntities("&#21704;&#21704;&nbsp;&#39;&#36825;&#20010;&#39;&amp;&quot;&#37027;&#20010;&quot;&#22909;&#29609;&lt;&gt;") //?? '??'&"??"??<>

作为一个新用户,我只有1个声誉:(

我不能对现有帖子发表评论或回答,这是我现在唯一能做的事情.

编辑1

我认为这个答案比我的更好.虽然没有人给他投票.

  • 重要的!这很容易受到用户输入内容的 XSS 攻击。由于有两个单独的“replace”调用,“&lt;”被转换为“&lt;”。 (4认同)
  • 这将错过很多 html 实体,例如 `”` `ü` `š` 等。所有 html 实体的综合列表相当长:https://www.freeformatter.com/html-实体.html (3认同)
  • 这是不正确的。由于有两个“替换”,“&amp;#41;” 将被解码为“A”而不是“)” 本来应该如此。我仍然投票,但因为链接的答案是正确的。 (2认同)