我正在使用 javascript 从 XML 生成 HTML 页面(从 XML 文件生成表),我有某种 XML 结构等。我编写 HTML 代码如下
document.write("<span>" + name + "</span>");
我得到我的变量如下
name = x[i].getElementsByTagName("NAME")[0].childNodes[0].nodeValue;
所以变量名包含我的 XML 文件结构中的任何节点NAME包含简单的 XML 来演示:
<FILE>
<NAME>file 1.2.3</NAME>
<SIZE>1Kb</SIZE>
</FILE>
用户正在编辑 XML 文件,因此用户可以插入他/她想要的任何内容,因此如果用户输入:<script>alert(1);</script>
在 NAME 节点中,JavaScript 将打印出常规 HTML,浏览器将调用“alert(1)”。这就是我不想发生的事情。
所有编辑都使用“我的”前端完成,并通过 php 函数 htmlspecialchars(); 所以实际上用户将保存到 NAME 节点中的是“编码”HTML
<script>alert(3);</script>
即使这还不够,当 XML 与编码的 HTML 标签一起保存时,javascript 会将它们打印为普通标签。
换句话说:我怎样才能在页面上使用 JS (document.write) 跟随文本:<?php $=1; ?>
或<htmltag>whatever is here </htmltag>
不破坏我的真实 HTML。
有什么解决办法吗?
例如,这不像我期望的那样工作:
document.write("<span class=\"edit\"><script>alert(3);</script></span>");
解决方案
在网上找到了这个功能
function htmlspecialchars(str) {
if (typeof(str) == "string") {
str = str.replace(/&/g, "&"); /* must do & first */
str = str.replace(/"/g, """);
str = str.replace(/'/g, "'");
str = str.replace(/</g, "<");
str = str.replace(/>/g, ">");
}
return str;
}
它完成了工作,但我真的不明白为什么。
在 XML 文件中,它已经“编码”或以可以安全呈现的形式(发送到 document.write 函数)。我只是再次执行“htmlspecialchars”,效果很好。
document.write("<span>" + htmlspecialchars(name) + "</span>");