Php DOMDocument:createElement在找到第一个随机标记之前

Php DOMDocument:createElement在找到第一个随机标记之前,php,domdocument,Php,Domdocument,我有以下代码: $html_content = '<p>text 1</p><p>text 2</p>'; $dom = new DOMDocument; @$dom->loadHTML(mb_convert_encoding($html_content, 'HTML-ENTITIES', 'utf-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 结果是: //echo tidy_r

我有以下代码:

$html_content = '<p>text 1</p><p>text 2</p>';

$dom = new DOMDocument;
@$dom->loadHTML(mb_convert_encoding($html_content, 'HTML-ENTITIES', 'utf-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
结果是:

//echo tidy_repair_string($dom->saveHtml(), array('show-body-only' => true));

<p>text 1</p>
<p>text2</p>
<span>Hello</span>
//echo tidy_repair_string($dom->saveHtml(),数组('show-body-only'=>true));
文本1

文本2

你好
但我需要这个:

<span>Hello</span>
<p>text 1</p>
<p>text2</p>
你好 文本1

文本2

有什么想法吗


非常感谢

如果您有这两个元素的父节点-

$dom->documentElement->insertBefore($dom->createElement('span', 'Hello'),$dom->documentElement->firstChild);
因此,我们的想法是在document元素的第一个子元素之前插入新元素

编辑:更完整的例子

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$xml= "<body>
<p>text 1</p>
<p>text2</p>
</body>";

$dom = new DOMDocument();
$dom->loadXML($xml);

$dom->documentElement->insertBefore($dom->createElement('span', 'Hello'),$dom->documentElement->firstChild);

echo $dom->saveXML();

你好
文本1

文本2

更新:如果你像你说的那样使用HTML

$html_content= "<p>text 1</p>
<p>text2</p>";

$dom = new DOMDocument();
$dom->loadHTML(mb_convert_encoding($html_content, 'HTML-ENTITIES', 'utf-8'),
                LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

echo $dom->saveHTML();
$html\u content=“text 1

text2

”; $dom=新的DOMDocument(); $dom->loadHTML(mb\u转换\u编码($html\u内容,'html-ENTITIES','utf-8'), LIBXML_HTML_noimpled | LIBXML_HTML_NODEFDTD); echo$dom->saveHTML();
给予-

<p>text 1<p>text2</p></p>
text 1text 2


这仍然不是您所追求的。

如果您有这两个元素的父节点-

$dom->documentElement->insertBefore($dom->createElement('span', 'Hello'),$dom->documentElement->firstChild);
因此,我们的想法是在document元素的第一个子元素之前插入新元素

编辑:更完整的例子

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$xml= "<body>
<p>text 1</p>
<p>text2</p>
</body>";

$dom = new DOMDocument();
$dom->loadXML($xml);

$dom->documentElement->insertBefore($dom->createElement('span', 'Hello'),$dom->documentElement->firstChild);

echo $dom->saveXML();

你好
文本1

文本2

更新:如果你像你说的那样使用HTML

$html_content= "<p>text 1</p>
<p>text2</p>";

$dom = new DOMDocument();
$dom->loadHTML(mb_convert_encoding($html_content, 'HTML-ENTITIES', 'utf-8'),
                LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

echo $dom->saveHTML();
$html\u content=“text 1

text2

”; $dom=新的DOMDocument(); $dom->loadHTML(mb\u转换\u编码($html\u内容,'html-ENTITIES','utf-8'), LIBXML_HTML_noimpled | LIBXML_HTML_NODEFDTD); echo$dom->saveHTML();
给予-

<p>text 1<p>text2</p></p>
text 1text 2


这仍然不是你想要的。

嗨,我想第四只鸟的答案是一样的,但输出是:Hellotext 1

。Span应该在之前
标记上方是否有元素-因为XML文档需要有一个顶级元素。如果你没有-它可能使用
标记作为顶级元素。我这样加载代码:
@$dom->loadHTML(mb_convert_编码($html_内容,'html-ENTITIES','utf-8')、LIBXML_html_noimpled、LIBXML_html_NODEFDTD)如果你有你需要使用的代码,它会让你的生活变得更加轻松,因为你已经把它包含在你的问题中了。嗨,奈杰尔,谢谢你的帮助。我更新了问题。您的答案几乎正确,但标签并没有出现在开头:
Hellotext 1text 2

您好,我认为第四只鸟的答案是相同的,但输出是:Hellotext 1

。Span应该在之前
标记上方是否有元素-因为XML文档需要有一个顶级元素。如果你没有-它可能使用
标记作为顶级元素。我这样加载代码:
@$dom->loadHTML(mb_convert_编码($html_内容,'html-ENTITIES','utf-8')、LIBXML_html_noimpled、LIBXML_html_NODEFDTD)如果你有你需要使用的代码,它会让你的生活变得更加轻松,因为你已经把它包含在你的问题中了。嗨,奈杰尔,谢谢你的帮助。我更新了问题。您的答案几乎正确,但标签没有出现在开头:
Hellotext 1text 2

您的示例代码没有生成示例输出,您确定两者都是您所拥有的吗?您好,当然。你到底看到了什么???@salathe你是对的,我更新了问题你的示例代码没有生成示例输出,你确定两者都是你所拥有的吗?嗨,当然。你到底看到了什么???@sala你是对的,我更新了这个问题