首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >HTML实体解码

HTML实体解码
EN

Stack Overflow用户
提问于 2011-04-27 05:32:22
回答 14查看 516.2K关注 0票数 293

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

代码语言:javascript
复制
var varTitle = "Chris' corner";

我希望它是:

代码语言:javascript
复制
var varTitle = "Chris' corner";
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2011-04-27 05:35:11

您可以尝试如下所示:

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

JS Fiddle

更具交互性的版本:

代码语言:javascript
复制
$('form').submit(function() {
  var theString = $('#string').val();
  var varTitle = $('<textarea />').html(theString).text();
  $('#output').text(varTitle);
  return false;
});
代码语言:javascript
复制
<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 Fiddle

票数 244
EN

Stack Overflow用户

发布于 2012-03-08 05:36:37

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

代码语言:javascript
复制
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/

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

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

代码语言:javascript
复制
jQuery.decodeEntities = decodeEntities;
票数 298
EN

Stack Overflow用户

发布于 2017-02-12 07:07:08

Original author answer here

这是我最喜欢的解码HTML字符的方法。使用此代码的好处是标记也会被保留。

代码语言:javascript
复制
function decodeHtml(html) {
    var txt = document.createElement("textarea");
    txt.innerHTML = html;
    return txt.value;
}

示例:http://jsfiddle.net/k65s3/

输入:

代码语言:javascript
复制
Entity:&nbsp;Bad attempt at XSS:<script>alert('new\nline?')</script><br>

输出:

代码语言:javascript
复制
Entity: Bad attempt at XSS:<script>alert('new\nline?')</script><br>
票数 60
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5796718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档