// 字符串反转义
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值)
}
简单说一下业务场景,前台用户通过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>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)