html转义/反转义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了html转义/反转义相关的知识,希望对你有一定的参考价值。

参考技术A

// 字符串反转义
function enXsshtml(text)
const matchList =
"<": "<",
">": ">",
"&": "&",
"": \'""\',
""": \'"\',
"\'": "\'",
;
let regStr = "(" + Object.keys(matchList).toString() + ")";
// ↑ ------------【 提取匹配列表key值 】.【组数转字符串】
regStr = regStr.replace(/,/g, ")|(");
// ↑ 通过匹配将其更新为正则的字符串类型
const regExp = new RegExp(regStr, "g");
// ↑ ------- 字符串 转 正则 方法
return text.replace(regExp, (match) => matchList[match]);
// ↑ ------ 替换方法 (正则, 当前key => 返回当前被匹配的key值)

// 字符串反转义
function deXssHtml(text)
const matchList =
"<": "<",
">": ">",
"&": "&",
\'"\': \'"\',
\'"\': \'"\',
"\'": "\'",
;
let regStr = "(" + Object.keys(matchList).toString() + ")";
// ↑ ------------【 提取匹配列表key值 】.【组数转字符串】
regStr = regStr.replace(/,/g, ")|(");
// ↑ 通过匹配将其更新为正则的字符串类型
const regExp = new RegExp(regStr, "g");
// ↑ ------- 字符串 转 正则 方法
return text.replace(regExp, (match) => matchList[match]);
// ↑ ------ 替换方法 (正则, 当前key => 返回当前被匹配的key值)

JS实现HTML标签转义及反转义

参考技术A 简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。
这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。
由于是纯前端操作,不涉及后端,因此需要通过js对输入内容进行转义。
这里提供一个非常简单有效的转义方案,利用了innerHTML和innerText
注:火狐不支持innerText,需要使用
textContent
属性,而IE早期版本不支持此属性,为了同时兼容IE及火狐,需要进行判断操作.
因为innerText(textContent)会获取纯文本内容,忽略html节点标签,而innerHTML会显示标签内容,
所以我们先将需转义的内容赋值给innerText(textContent),再获取它的innerHTML属性,这时获取到的就是转义后文本内容。
代码如下:
function
HTMLEncode(html)

var
temp
=
document.createElement("div");
(temp.textContent
!=
null)
?
(temp.textContent
=
html)
:
(temp.innerText
=
html);
var
output
=
temp.innerHTML;
temp
=
null;
return
output;

var
tagText
=
"<p><b>123&456</b></p>";
console.log(HTMLEncode(tagText));//<p><b>123&456</b></p>
通过测试结果,可以看到html标签及&符都被转义后保存。
同理,反转义的方法为先将转义文本赋值给innerHTML,然后通过innerText(textContent)获取转义前的文本内容
function
HTMLDecode(text)

var
temp
=
document.createElement("div");
temp.innerHTML
=
text;
var
output
=
temp.innerText
||
temp.textContent;
temp
=
null;
return
output;

var
tagText
=
"<p><b>123&456</b></p>";
var
encodeText
=
HTMLEncode(tagText);
console.log(encodeText);//<p><b>123&456</b></p>
console.log(HTMLDecode(encodeText));
//<p><b>123&456</b></p>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

以上是关于html转义/反转义的主要内容,如果未能解决你的问题,请参考以下文章

js转义和反转义html

JS实现HTML标签转义及反转义

JS实现HTML标签转义及反转义

JS实现HTML标签转义及反转义

jquery与php的HTML转义与反转义

JS实现HTML标签转义及反转义