我有一些与XML-RPC后端通信的Javascript代码.XML-RPC返回表单的字符串:
但是,当我使用Javascript将字符串插入HTML时,它们会逐字呈现.我没有看到图像,我真的看到了字符串:
我的猜测是HTML正在通过XML-RPC通道进行转义.
我怎样才能在Javascript中取消字符串?我尝试了这个页面上的技术,但未成功:http://paulschreiber.com/blog/2008/09/20/javascript-how-to-unescape-html-entities/
诊断问题的其他方法有哪些?
这里给出的大多数答案都有一个很大的缺点:如果您尝试转换的字符串不受信任,那么您最终会遇到跨站点脚本(XSS)漏洞.对于接受的答案中的功能,请考虑以下事项:
htmlDecode("");
这里的字符串包含一个未转义的HTML标记,因此该htmlDecode
函数不会解码任何内容,而是实际运行字符串中指定的JavaScript代码.
使用所有现代浏览器都支持的DOMParser可以避免这种情况:
function htmlDecode(input) { var doc = new DOMParser().parseFromString(input, "text/html"); return doc.documentElement.textContent; } // This returns "" htmlDecode("<img src='myimage.jpg'>"); // This returns "" htmlDecode("");
保证此函数不会将任何JavaScript代码作为副作用运行.将忽略任何HTML标记,仅返回文本内容.
兼容性说明:解析HTML DOMParser
至少需要Chrome 30,Firefox 12,Opera 17,Internet Explorer 10,Safari 7.1或Microsoft Edge.因此,所有没有支持的浏览器都会超过他们的EOL,而截至2017年,唯一仍然可以在野外看到的浏览器偶尔会出现旧的Internet Explorer和Safari版本(通常这些版本仍然不足以打扰).