原生JavaScript或ES6编码和解码HTML实体的方式?

Mar*_*ang 14 javascript html-entities node.js

是否有使用JavaScript或ES6 编码或解码HTML实体的本机方法?例如,<将被编码为&lt;.有像html-entitiesNode.js这样的库,但感觉应该有一些内置于JavaScript中的东西已经处理了这个常见的需求.

asa*_*fel 19

使用 es6 转义 html 的一个不错的函数:

const escapeHTML = str => str.replace(/[&<>'"]/g, 
  tag => ({
      '&': '&amp;',
      '<': '&lt;',
      '>': '&gt;',
      "'": '&#39;',
      '"': '&quot;'
    }[tag]));
Run Code Online (Sandbox Code Playgroud)

  • +1,因为它很好,很简单,并且在不依赖某些第 3 方代码的情况下工作......尽管由于正则表达式,后备是不必要的 (2认同)

Kyl*_*Mit 8

自己动手(警告 - 对于大多数用例,请使用 HE)

\n\n

对于没有 lib 的纯 JS,您可以使用纯 Javascript 对 HTML 实体进行编码和解码如下所示:

\n\n
let encode = str => {\n  let buf = [];\n\n  for (var i = str.length - 1; i >= 0; i--) {\n    buf.unshift([\'&#\', str[i].charCodeAt(), \';\'].join(\'\'));\n  }\n\n  return buf.join(\'\');\n}\n\nlet decode = str => {\n  return str.replace(/&#(\\d+);/g, function(match, dec) {\n    return String.fromCharCode(dec);\n  });\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

用法

\n\n
encode("Hello > \xc2\xa9 <") // "&#72;&#101;&#108;&#108;&#111;&#32;&#62;&#32;&#169;&#32;&#60;"\ndecode("Hello &gt; &copy; &#169; &lt;") // "Hello &gt; &copy; \xc2\xa9 &lt;"\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,您可以看到这种方法有一些缺点:

\n\n\n\n
\n\n

使用高等教育图书馆(Html 实体)

\n\n\n\n

用法

\n\n
he.encode(\'foo \xc2\xa9 bar \xe2\x89\xa0 baz  qux\'); \n// Output : \'foo &#xA9; bar &#x2260; baz &#x1D306; qux\'\n\nhe.decode(\'foo &copy; bar &ne; baz &#x1D306; qux\');\n// Output : \'foo \xc2\xa9 bar \xe2\x89\xa0 baz  qux\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

相关问题

\n\n\n


A. *_*lle 6

JavaScript API 中没有将 ASCII 字符转换为它们的“html-entities”等价物的本机函数。这是您可能喜欢的解决方案简单技巧开始


归档时间:

查看次数:

13545 次

最近记录:

6 年,9 月 前