问题描述
我们使用需要发送电子邮件和姓名的JavaScript代码集成了第三方应用。
some.survey({
email: "test@test.pt",name: "Mon & Sons",properties: {"one":"123","two":"345"}
});
问题在于,打印之前的第三方再次对我们的字符串进行编码,在浏览器中显示为"Mon & Sons"
。
有人知道如何解决这个问题吗?
解决方法
这是一种方法(基于https://stackoverflow.com/a/784698):
function DecodeHTML(txt) {
var el = document.createElement("div");
el.innerHTML = txt;
return el.innerText;
};
DecodeHTML("Mon & Sons");
//"Mon & Sons"
编辑:但是请注意XSS攻击。第三方应用程序可能会这样做,以将'
转换为'
并将"
转换为"
,因此您可能希望在上述构想的基础上防止这种情况,具体取决于您的需求。例如,如果您要在HTML页面上显示此信息,请仅在该页面中设置元素的innerText
,例如nameelement.innerText = nametext;
sbgib关于它如何工作几乎是正确的。因此,我们现在将编码后的字符串输出,并使用Javascript对其进行解码,然后再将其发送到外部服务。
function DecodeHTML(txt) {
var el = document.createElement("div");
el.innerHTML = txt;
return el.innerText;
}
some.survey({
email: "test@test.pt",name: DecodeHTML("Mon & Sons"),properties: {"one":"123","two":"345"}
});