当然还有很多其他的,可以查看对照表解决。
转义的目的就是为了防止冲突或者代码被浏览器执行了。
// 字符串反转义
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值)
}
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>
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>