javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > js将Unicode编码转为HTML

后端返回的\u003c\u003e等中文Unicode编码格式,前端js如何转为HTML?

作者:冯宣

在前后端交互中,有时后端返回的HTML内容会被转义为类似“u003c”、“u003e”的Unicode编码格式,这种编码方式虽然能防止XSS攻击,但在前端展示时会显示为乱码而非正常的HTML结构,如何在前端将这些被转义的Unicode字符还原为可正常渲染的HTML?

1. 问题背景与分析

在前后端交互中,后端返回的数据可能经过安全编码处理,将HTML特殊字符转换为Unicode转义序列(如“<”转为“u003c”,“>”转为“u003e”)。这种做法有效防止了XSS攻击,但前端接收到数据后直接插入DOM会导致乱码显示。

例如,后端返回的JSON数据:

{
    "content": "u003cbu003e加粗文本u003c/bu003e"
}

如果直接将内容插入到DOM中,浏览器会将其作为纯文本显示,而非渲染成HTML结构。

2. 关键技术点解析

解决此问题的关键技术点在于:Unicode转义字符的解码HTML字符串的安全渲染。以下是具体的技术要点:

以下是两种常见的实现方式:

2.1 使用String.fromCharCode解码

可以通过正则表达式匹配所有Unicode转义字符,并使用`String.fromCharCode`将其还原为原始字符。

function decodeUnicode(str) {
    return str.replace(/\\u[\dA-F]{4}/gi, function(match) {
        return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16));
    });
}

const decodedStr = decodeUnicode('u003cbu003e加粗文本u003c/bu003e');
console.log(decodedStr); // 输出: <b>加粗文本</b>

2.2 使用DOMParser解析HTML

通过`DOMParser`将解码后的HTML字符串解析为DOM节点,再插入到页面中。

function renderSafeHTML(htmlStr) {
    const parser = new DOMParser();
    const doc = parser.parseFromString(htmlStr, 'text/html');
    return doc.body.innerHTML;
}

const safeHTML = renderSafeHTML('<b>加粗文本</b>');
document.getElementById('container').innerHTML = safeHTML;

3. 解决方案流程图

以下是解决方案的整体流程图:

graph TD; A[接收JSON数据] --> B{是否包含Unicode转义?}; B --是--> C[调用decodeUnicode解码]; C --> D[使用DOMParser解析HTML]; D --> E[插入到DOM中]; B --否--> F[直接插入DOM];

4. 注意事项与扩展思考

在实际开发中需要注意以下几点:

此外,还可以结合前后端约定,尽量减少后端返回的转义字符,从而降低前端处理复杂度。

到此这篇关于后端返回的\u003c\u003e等Unicode编码格式,前端js如何转为HTML?的文章就介绍到这了,更多相关js将Unicode编码转为HTML内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文