You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何将API返回的转义HTML字符串转换为正常HTML?

问题根因

接口返回的HTML内容经过了两层HTML实体转义,且首尾额外包裹了一层双引号,这是普通单次解码方法失效、代码抛出语法错误的核心原因:

  • 第一层转义将原始HTML的</>/"转换为&lt;/&gt;/&quot;
  • 第二层转义将上述实体中的&再次转换为&amp;,最终呈现为你看到的&amp;lt;/&amp;gt;/&amp;quot;
  • 首尾未处理的双引号会打断JS字符串语法,直接触发unexpected token: identifier报错
可直接复用的解决方案

不需要引入第三方库,按3步处理即可得到可直接渲染的标准HTML:

  • 去除返回值首尾多余的包裹双引号
  • 连续执行两次HTML实体解码,还原两层转义的内容
  • 将最终得到的字符串直接插入DOM节点即可渲染
// 接口返回的原始值
const apiRawResult = `"&amp;lt;button type=button class=Button onclick=&quot;openwp('1677008','RHpdFBx7GS9YGFEwFmUUCyE4Ih8lHyA!H2JbUENBa1BV')&quot; &amp;gt;&amp;lt;i class=&quot;fa fa-pencil-square-o&quot; style=&quot;margin: 0 4px 0 0&quot;&amp;gt;&amp;lt;/i&amp;gt;Enter Budget&amp;lt;/button&amp;gt;"`;

// 原生JS实体解码函数,兼容所有标准HTML实体
const decodeEntities = (str) => {
  const textarea = document.createElement('textarea');
  textarea.innerHTML = str;
  return textarea.value;
};

// 1. 去除首尾多余双引号
let htmlStr = apiRawResult.trim().replace(/^"|"$/g, '');
// 2. 两次解码还原两层转义
htmlStr = decodeEntities(decodeEntities(htmlStr));

// 此时htmlStr就是目标HTML结构,可直接渲染
// 示例:插入到页面容器中
// document.querySelector('.btn-container').innerHTML = htmlStr;

处理后输出的HTML结构和预期完全一致:

<button type="button" 
        class="Button" 
        onclick="openwp('1677008','RHpdFBx7GS9YGFEwFmUUCyE4Ih8lHyA!H2JbUENBa1BV')">
  <i class="fa fa-pencil-square-o" 
     style="margin: 0 4px 0 0" 
     data-original-title="" 
     title="">
  </i>
  Enter Budget
</button>
之前方案失效的原因
  • Lodash unescape、常规第三方解码方法默认只执行一次解码,仅能把&amp;还原为&,输出的仍是带&lt;/&gt;的第一层转义内容,无法得到原生DOM标签
  • 未提前去除首尾的双引号时,双引号会截断JS字符串赋值语句,直接触发语法错误

问题说明截图

内容的提问来源于stack exchange,提问作者Karim Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:39:51