在JavaScript中,HtmlSpecialChars的等价函数是什么?

14 浏览
0 Comments

在JavaScript中,HtmlSpecialChars的等价函数是什么?

显然,这比我想象的要难找。而且它甚至是如此简单...\n在JavaScript中是否有一个等同于PHP的htmlspecialchars的内建函数?我知道自己实现这个函数相当容易,但如果有内建函数可用,那就更好了。\n对于那些不熟悉PHP的人来说,htmlspecialchars可以将像这样的内容转换为<htmltag/>。\n我知道escape()encodeURI()不是以这种方式工作。

0
0 Comments

问题的出现原因:用户想知道在JavaScript中是否有类似于HtmlSpecialChars的函数,用于转义HTML特殊字符。

解决方法:用户在提问中提供了一个可以用于转义HTML特殊字符的JavaScript函数。这个函数使用了一个MAP对象,其中包含了HTML特殊字符与其转义字符的映射关系。然后使用一个内部的repl函数来替换字符串中的特殊字符。最后,将这个函数返回,可以用于转义HTML特殊字符。

注意事项:此函数只能运行一次,并且不要在已经进行过转义的字符串上运行。用户建议这个函数是被接受且得到最高票数的答案。用户还不确定为什么这个答案没有得到更多的票数。这个函数在jsperf上(一个JavaScript性能测试网站)被测试为最快的函数,无论是对于长字符串还是短字符串的转义。用户请大家支持这个答案。

用户还提出了一个问题,即这个函数与得到最高票数的答案有什么区别?为什么需要额外的内部函数?用户认为解释这个问题可以帮助用户更好地理解。

0
0 Comments

在JavaScript中,没有原生的函数来执行HTML编码(HTML Encoding),但是可以通过搜索获得一些已经很好实现的方法。

原帖中提到了一个链接(http://sanzon.wordpress.com/2008/05/01/neat-little-html-encoding-trick-in-javascript/),可以通过该链接找到一个实现HTML编码的方法。

下面是原帖中提到的测试代码:

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

运行结果为:&lt;htmltag/&gt;

然而,该方法并不符合要求,需要使用自定义函数来实现HTML编码。

原帖中还提到了另一个链接(yuki-onna.co.uk/html/encode.html),该链接的代码实现了`encodeURIComponent`的功能,而不是原帖所要求的HTML编码。

原帖中还提供了一个经过验证的链接,但没有给出具体内容。

后续的回复中提到了一个更简单的解决方案:

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

这是一个聪明的解决方法。

原帖中提到了HTML编码在JavaScript中的问题,并提供了一些解决方法和链接。

0
0 Comments

问题的出现的原因是解决方案代码存在问题,它只会转义每个特殊字符的第一个出现。为了解决这个问题,需要使用正确的代码,如下所示:

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

这段代码可以正确地转义HTML中的特殊字符。

更新部分介绍了一个效果相同但性能更好的代码:

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

这段代码使用了一个映射表来进行替换,可以在处理大块文本时提高性能。这个函数在node.js中也可以使用,因为它不需要使用DOM。

某些情况下这个函数比较快的原因是它使用了单个替换和映射函数,而单个替换的性能更好。但是,也有人认为这段代码更容易理解,并且在性能上的提升可能只有在连续多次调用escapeHtml()时才会有所体现。

还某些情况下这段代码会扭曲文本中的URL,导致像Autolinker.js这样的插件无法使用。但是,这被认为是插件的一个bug,因为在HTML文档中,所有的特殊字符应该被编码。也某些情况下了一种解决方法,即插件自己负责编码除URL以外的所有内容。

还某些情况下在使用.replace(/'/g, "&#039;");时遇到了问题,浏览器会将其转换回撇号。解决方法是添加转义字符:.replace(/'/g, "\\&#039;");

还有人建议将映射变量声明在函数之前,以提高性能。提供了相应的性能测试链接。

以上内容讨论了解决HTML特殊字符转义的问题,提供了两种解决方法,并讨论了一些相关的问题和优化建议。

0