首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >解码包含特殊HTML实体的字符串的正确方法是什么?

解码包含特殊HTML实体的字符串的正确方法是什么?
EN

Stack Overflow用户
提问于 2011-09-13 06:26:30
回答 6查看 294.7K关注 0票数 243

假设我从一个服务请求中得到一些JSON,如下所示:

代码语言:javascript
复制
{
    "message": "We're unable to complete your request at this time."
}

我不确定为什么这个apostraphe是这样编码的(');我只知道我想解码它。

下面是我脑海中突然出现的一种使用jQuery的方法:

代码语言:javascript
复制
function decodeHtml(html) {
    return $('<div>').html(html).text();
}

不过,这看起来(非常)有些老生常谈。有什么更好的方法吗?有没有“正确”的方法?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-13 06:29:57

这是我最喜欢的解码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>
票数 461
EN

Stack Overflow用户

发布于 2011-09-13 06:33:49

如果不想使用html/dom,可以使用regex。我还没有测试过这一点;但大致是这样的:

代码语言:javascript
复制
function parseHtmlEntities(str) {
    return str.replace(/&#([0-9]{1,3});/gi, function(match, numStr) {
        var num = parseInt(numStr, 10); // read num as normal number
        return String.fromCharCode(num);
    });
}

编辑

注意:这只适用于数字html实体,而不是像&oring;这样的东西。

编辑2

修复了函数(一些拼写错误),在这里测试:http://jsfiddle.net/Be2Bd/1/

票数 43
EN

Stack Overflow用户

发布于 2016-03-22 01:43:05

jQuery将为您进行编码和解码。

代码语言:javascript
复制
function htmlDecode(value) {
  return $("<textarea/>").html(value).text();
}

function htmlEncode(value) {
  return $('<textarea/>').text(value).html();
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
   $("#encoded")
  .text(htmlEncode("<img src onerror='alert(0)'>"));
   $("#decoded")
  .text(htmlDecode("&lt;img src onerror='alert(0)'&gt;"));
});
</script>

<span>htmlEncode() result:</span><br/>
<div id="encoded"></div>
<br/>
<span>htmlDecode() result:</span><br/>
<div id="decoded"></div>

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7394748

复制
相关文章

相似问题

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