我遇到一个小问题:标签,例如提交PHP DomDocument时,不会解析<br>
标记。这是我的PHP代码:
$doc = new DOMDocument();
$doc->loadHTMLFile("Test.html");
$doc->formatOutput = true;
$node = new DOMElement('p', 'This is a test<br>This should be a new line in the same paragraph');
$doc->getElementsByTagName('body')->item(0)->appendChild($node);
$doc->saveHTMLFile("Test.html");
echo 'Editing successful.';
这是HTML代码(编辑前):
<!DOCTYPE html>
<html>
<head>
<title>Hey</title>
</head>
<body>
<p>Test</p>
</body>
</html>
(编辑后)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hey</title>
</head>
<body>
<p>Test</p>
<p>This is a test<br>This should be a new line in the same paragraph</p>
</body>
</html>
为什么不起作用?
答案 0 :(得分:2)
您正在尝试附加一个fragment,它不能用作“普通”字符串(它怎么会知道您想要它编码什么而不是什么?)。
您可以使用DOMDocumentFragment::appendXML()
功能,但正如名称所述,它需要XML
,而不是HTML
,因此{{1} 需要自我关闭(因为我们在XML模式下工作):
<br>
另一个不涉及更改字符串的解决方案是将单独的文档作为HTML加载(<?php
$doc = new DOMDocument();
$doc->loadHTMLFile("Test.html");
$doc->formatOutput = true;
$node = new DOMElement('p');
$p = $doc->lastChild->lastChild->appendChild($node);
$fragment = $doc->createDocumentFragment();
$fragment->appendXML('This is a test<br/>This should be a new line in the same paragraph');
$p->appendChild($fragment);
$doc->saveHTMLFile("Test.html");
,然后在主文档中循环导入:
$otherdoc->loadHTML('<html><body>'.$yourstring.'</body></html>')
答案 1 :(得分:0)
您是否尝试过<br/>
而不是<br>
?这可能与标记的有效性有关。 <br>
无效。