如何转义HTML但不转义字符实体?
How to escape HTML but do not escape character entities?
我必须转义任意字符串,然后分配给 innerHTML。
但是字符串可能已经包含了字符实体,比如
var str1 = "A & B & C";
var str2 = "A > B > C";
var str3 = "A&qout;B&qout; C &qout;";
我想得到
A & B & C
A > B > C
A"B" C "
问题是如何对“&”进行转义而不对其他字符实体中的“&”进行转义?
先转义,所以把&
换成&
,然后转义。
示例:
function unescapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, '"')
.replace(/'/g, "'")
}
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
function setText(id, text){
document.getElementById(id).innerHTML = escapeHtml(unescapeHtml(text))
}
var str1 = "A & B & C";
var str2 = "A > B > C";
var str3 = "A&B&C"
var str4 = "A"B" C ""
setText("container1", str1);
setText("container2", str2);
setText("container3", str3);
setText("container4", str4);
<div id="container1"></div>
<div id="container2"></div>
<div id="container3"></div>
<div id="container4"></div>
var str1 = "A & B & C";
var str2 = "A > B > C";
var str3 = "A & B & C > D < X";
str1 = str1.replace(/\&\;/g, '&');
str2 = str2.replace(/\>\;/g, '>');
str3 = str3.replace(/\&\;/g, '&').replace(/\>\;/g, '>').replace(/\<\;/g, '<');
console.log(str1);
console.log(str2);
console.log(str3);
我必须转义任意字符串,然后分配给 innerHTML。
但是字符串可能已经包含了字符实体,比如
var str1 = "A & B & C";
var str2 = "A > B > C";
var str3 = "A&qout;B&qout; C &qout;";
我想得到
A & B & C
A > B > C
A"B" C "
问题是如何对“&”进行转义而不对其他字符实体中的“&”进行转义?
先转义,所以把&
换成&
,然后转义。
示例:
function unescapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, '"')
.replace(/'/g, "'")
}
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
function setText(id, text){
document.getElementById(id).innerHTML = escapeHtml(unescapeHtml(text))
}
var str1 = "A & B & C";
var str2 = "A > B > C";
var str3 = "A&B&C"
var str4 = "A"B" C ""
setText("container1", str1);
setText("container2", str2);
setText("container3", str3);
setText("container4", str4);
<div id="container1"></div>
<div id="container2"></div>
<div id="container3"></div>
<div id="container4"></div>
var str1 = "A & B & C";
var str2 = "A > B > C";
var str3 = "A & B & C > D < X";
str1 = str1.replace(/\&\;/g, '&');
str2 = str2.replace(/\>\;/g, '>');
str3 = str3.replace(/\&\;/g, '&').replace(/\>\;/g, '>').replace(/\<\;/g, '<');
console.log(str1);
console.log(str2);
console.log(str3);