Php JavaScript document.write(编码的html标记),按原样打印
我正在使用javascript从XML生成HTML页面(从XML文件生成表), 我有一些XML结构等,我写HTML代码如下Php JavaScript document.write(编码的html标记),按原样打印,php,javascript,html,xml,Php,Javascript,Html,Xml,我正在使用javascript从XML生成HTML页面(从XML文件生成表), 我有一些XML结构等,我写HTML代码如下 document.write("<span>" + name + "</span>"); 所以变量name包含我的XML文件结构中name包含的任何节点 要演示的简单XML: <FILE> <NAME>file 1.2.3</NAME> <SIZE>1Kb</SIZE> </FILE
document.write("<span>" + name + "</span>");
所以变量name包含我的XML文件结构中name包含的任何节点
要演示的简单XML:
<FILE>
<NAME>file 1.2.3</NAME>
<SIZE>1Kb</SIZE>
</FILE>
即使所有这些都是不够的,当XML与编码的HTML标记一起保存时,javascript将它们作为普通标记打印出来
换句话说:我如何使用JS(document.write)在页面上编写以下文本:
或此处的任何内容
,而不破坏我真正的HTML
有解决办法吗
例如,这不符合我的预期:
document.write("<span class=\"edit\"><script>alert(3);</script></span>");
document.write(“scriptalert(3);/script”);
解决方案
在web上找到此函数
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;
}
函数htmlspecialchars(str){
如果(类型(str)=“字符串”){
str=str.replace(/&/g,“&;”)/*必须先做*/
str=str.replace(/“/g,”);
str=str.replace(/“/g,';”);
str=str.replace(//g,“”);
}
返回str;
}
它确实完成了任务,但我真的不明白为什么
在XML文件中,它已经被“编码”或以应该可以安全呈现的形式呈现(发送到document.write函数)。我只是又做了一次“htmlspecialchars”,效果很好
document.write("<span>" + htmlspecialchars(name) + "</span>");
document.write(“+htmlspecialchars(name)+”);
您是否尝试使用“单引号”
document.write(“”+name+“”);
如果要创建动态元素,并且如果要再次将这些元素与javascript一起使用,则应使用DOM函数(createElement、createTextNode、createAttribute):
我只是用javascript生成表,问题是当名称包含编码的html标记时,它会作为“普通”标记打印出来。它与单引号无关(我99%确定)。如果不正确编码,就无法在HTML中逐字打印XML<代码>根据您的目标,您需要注意CDATA部分,因为HTML没有这些部分,但XML有它们。此外,如果你在网上发现了一些东西,请在你获得它的地方留下一个链接。也可以将您的解决方案添加为答案,而不是编辑问题。那就接受吧。这就是这个网站的工作原理。
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;
}
document.write("<span>" + htmlspecialchars(name) + "</span>");
document.write('<span class="edit">' + name + '</span>');