[英]DOMdocument: using nodeValue to change html content produces wrongly formatted html file ( <div> 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">
</class= "dummydata">
</div>
</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('<', '<', $content);
$content = str_replace('>', '>', $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.