HTML 实体解码

2022-08-29 23:54:36

如何使用 JavaScript 或 JQuery 对 HTML 实体进行编码和解码?

var varTitle = "Chris' corner";

我希望它是:

var varTitle = "Chris' corner";

答案 1

我建议不要使用被接受为答案的jQuery代码。虽然它不会将要解码的字符串插入到页面中,但它确实会导致脚本和HTML元素等内容的创建。这比我们需要的代码要多得多。相反,我建议使用更安全,更优化的功能。

var decodeEntities = (function() {
  // this prevents any overhead from creating the object each time
  var element = document.createElement('div');

  function decodeHTMLEntities (str) {
    if(str && typeof str === 'string') {
      // strip script/html tags
      str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
      str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
      element.innerHTML = str;
      str = element.textContent;
      element.textContent = '';
    }

    return str;
  }

  return decodeHTMLEntities;
})();

http://jsfiddle.net/LYteC/4/

要使用这个函数,只需调用,它将使用与jQuery版本相同的底层技术 - 但没有jQuery的开销,并且在清理输入中的HTML标签之后。请参阅Mike Samuel对已接受答案的评论,了解如何过滤掉HTML标签。decodeEntities("&amp;")

通过在项目中添加以下行,此函数可以轻松用作jQuery插件。

jQuery.decodeEntities = decodeEntities;

答案 2

你可以尝试如下方法:

var Title = $('<textarea />').html("Chris&apos; corner").text();
console.log(Title);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

JS小提琴

更具互动性的版本:

$('form').submit(function() {
  var theString = $('#string').val();
  var varTitle = $('<textarea />').html(theString).text();
  $('#output').text(varTitle);
  return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="#" method="post">
  <fieldset>
    <label for="string">Enter a html-encoded string to decode</label>
    <input type="text" name="string" id="string" />
  </fieldset>
  <fieldset>
    <input type="submit" value="decode" />
  </fieldset>
</form>

<div id="output"></div>

JS小提琴