1,场景:后端返回结果中有特殊字符
2,概念:unescapeHTML将字符实体转成< > & " '
3,使用场景:后端将已经转义后的内容显示到页面;
比如<script>alert(2);</script>
js收到后:
a,前端进行unescapeHTML,则可以直接dom操作,将标签显示到页面。
b,前端没有unescapeHTML,则原样输出<script>alert(2);</script>,但此时并没有执行。
4,函数
unEscapeHtml = content => {
let ct = content;
if (!ct) return '';
const reg = /\\n/;
if (reg.test(ct)) {
ct = ct.replace(/\\n/g, '');
}
const div = document.createElement('div');
div.style.display = 'none';
div.innerHTML = ct;
return div.innerText;
};
调用:this.unEscapeHtml('要转义的字符串')
5,从util包中引入import { util } from '@/util';
util.unEscapeHtml('要转义的字符串')
注意:此方法也可以自动格式化字符串结构,有时不生效
6,escapeHTML将< > & " '转成字符实体
使用场景:
(1)用户在页面中录入(比如输入框) <script>alert(2);</script>, js将该内容提交给后端保存
(2)显示时,后端将字符串返回前端;js接收到之后:
a, 使用escapeHTML,将字符串转为 <script>alert(2);</script>此时,浏览器将能正确解析,因为浏览器接收到实体字符后,转成对应的尖括号等。
b, 不使用escapeHTML,浏览器一看到<,便认为是html标签的开始,直接把刚才的字符串当脚本执行了,这就是xss漏洞。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。