繁体   English   中英

DOMdocument:使用nodeValue更改html内容会产生格式错误的html文件(&lt;div&gt;而不是 <div> )

[英]DOMdocument: using nodeValue to change html content produces wrongly formatted html file ( &lt;div&gt; instead of <div>)

我正在使用jquery让用户定位各种div。 之后,我将它们通过jquery的$ .post转储到php POST函数中,并通过php将其保存到外部html文件中。 应该处理文字的.php文件使用DOMdocument(我从未使用过-我也不了解任何XML约定,如果有的话)。

.php文件显示为:

<?php
$data = $_POST['data'];
$doc = new DOMDocument();
$doc->loadHTMLFile("startfile.html");
$doc->getElementById('container')->nodeValue = $data;
$doc->saveHTMLFile("endfile.html")
?>

这真的很简单,应该可以正常工作。 Howewer,而endfile.html输出应为:

<div id="container">
<div class= "dummydata">
</div>
</div>

它实际上输出

<div id="container">
 &lt;/class= "dummydata"&gt;
 &lt;/div&gt;
</div>

当然,哪个浏览器无法正确解析。 我确信我一直缺少简单的东西,一旦解决方案出现在我的眼前,我会感到非常愚蠢。 我不想诉诸于fopen / fwrite,因为这似乎是一种非常优雅且灵活的处理html文件的方式。

编辑:由于所建议的XML片段解析由于格式不正确而一直失败(可能只是整容,因为我基本上正在传递工作的HTML代码-在间距和所用字符方面,XML可能更明智吗?这个非常骇人的解决方案:

//write HTML with nodevalue
$doc->getElementById('container')->nodeValue = $data;
$doc->saveHTMLFile("../test.html");
//open file and replace stripped < and >s
$file_path ='../test.html'
$content = file_get_contents($file_path);
$content = str_replace('&lt;', '<', $content);
$content = str_replace('&gt;', '>', $content);
file_put_contents($file_path, $content);

它不是很优雅,但可以。 有什么想法吗? 您是否认为这样一个骇人听闻的解决方案可能是合理的,而不是试图正确格式化我作为XML传递的HTML? 还有哪些可能的陷阱? 我什么也没想到,看到我只是在克隆格式错误但可以正常工作的HTML。 提前致谢。

是的, nodeValue将剥离标签。

您将需要创建数据片段 ,然后将其追加

<?php

$data = '<div class="dummydata"></div>';
$doc = new DOMDocument();
$doc->loadHTML('<!DOCTYPE html><div id="container">contents</div>');

$el = $doc->getElementById('container');

$children = $el->childNodes;
while ($children->length)
    $el->removeChild($children->item(0));

$frag = $el->ownerDocument->createDocumentFragment();
$frag->appendXML($data);
$el->appendChild($frag);

echo $doc->saveHTML();

如果要集成loadHTML和saveHTML,请确保将其替换为代码。

输出

<!DOCTYPE html>
<html><body><div id="container"><div class="dummydata"></div></div></body></html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM