JavaScript 中的 HtmlSpecialChars 等效项是什么?

2022-08-30 01:19:47

显然,这比我想象的更难找到。它甚至如此简单...

有没有一个函数等同于PHP的htmlspecialchars内置于JavaScript中?我知道自己实现它相当容易,但是使用内置函数(如果可用)会更好。

对于那些不熟悉PHP的人来说,htmlspecialchars将诸如<htmltag/>&lt;htmltag/&gt;

我知道这一点,并且不以这种方式工作。escape()encodeURI()


答案 1

您的解决方案代码存在问题 - 它只会对每个特殊字符的第一次出现进行转义。例如:

escapeHtml('Kip\'s <b>evil</b> "test" code\'s here');
Actual:   Kip&#039;s &lt;b&gt;evil</b> &quot;test" code's here
Expected: Kip&#039;s &lt;b&gt;evil&lt;/b&gt; &quot;test&quot; code&#039;s here

下面是正常工作的代码:

function escapeHtml(text) {
  return text
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;")
      .replace(/"/g, "&quot;")
      .replace(/'/g, "&#039;");
}

更新

下面的代码将产生与上述相同的结果,但它的性能更好,特别是在大文本块上(感谢jbo5112)。

function escapeHtml(text) {
  var map = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#039;'
  };
  
  return text.replace(/[&<>"']/g, function(m) { return map[m]; });
}

答案 2

这就是 HTML 编码。没有原生的javascript函数可以做到这一点,但你可以谷歌并得到一些做得很好的。

例如 http://sanzon.wordpress.com/2008/05/01/neat-little-html-encoding-trick-in-javascript/

编辑:
这是我测试过的:

var div = document.createElement('div');
  var text = document.createTextNode('<htmltag/>');
  div.appendChild(text);
  console.log(div.innerHTML);

输出:&lt;htmltag/&gt;