Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php JavaScript document.write(编码的html标记),按原样打印_Php_Javascript_Html_Xml - Fatal编程技术网

Php JavaScript document.write(编码的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

我正在使用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>
即使所有这些都是不够的,当XML与编码的HTML标记一起保存时,javascript将它们作为普通标记打印出来

换句话说:我如何使用JS(document.write)在页面上编写以下文本:
此处的任何内容
,而不破坏我真正的HTML

有解决办法吗

例如,这不符合我的预期:

document.write("<span class=\"edit\">&lt;script&gt;alert(3);&lt;/script&gt;</span>");
document.write(“scriptalert(3);/script”);
解决方案

在web上找到此函数

function htmlspecialchars(str) {
 if (typeof(str) == "string") {
  str = str.replace(/&/g, "&amp;"); /* must do &amp; first */
  str = str.replace(/"/g, "&quot;");
  str = str.replace(/'/g, "&#039;");
  str = str.replace(/</g, "&lt;");
  str = str.replace(/>/g, "&gt;");
 }
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, "&amp;"); /* must do &amp; first */
  str = str.replace(/"/g, "&quot;");
  str = str.replace(/'/g, "&#039;");
  str = str.replace(/</g, "&lt;");
  str = str.replace(/>/g, "&gt;");
 }
return str;
}
document.write("<span>" + htmlspecialchars(name) + "</span>");
document.write('<span class="edit">' + name + '</span>');