PHP DOM:设置 nodeValue 时,代码未格式化,而是显示文字 HTML 标签

Posted

技术标签:

【中文标题】PHP DOM:设置 nodeValue 时,代码未格式化,而是显示文字 HTML 标签【英文标题】:Php DOM: when setting nodeValue, code is not formatted, literal HTML tags get displayed instead 【发布时间】:2016-10-28 10:05:04 【问题描述】:

我正在尝试替换我的 div 内容之一:

  $html = new DOMDocument();
    $html->loadHTML($content);

    $elements = $html->getElementsByTagName('div');
    foreach($elements as $element)
      if($element->getAttribute('name') == "left_0")
       $element->nodeValue = "<h2>Title</h2>";
     

echo $html-> saveHTML(); 

我在 index.php 中得到以下输出:

<h2>Title</h2>

我一直在寻找答案,但找不到解决方法。 谢谢!

【问题讨论】:

你可以显示内容html文件或文本吗? 索引是一个简单的html5,

标题2>

【参考方案1】:

在你的循环里面把它改成:

foreach($elements as $element) 
    if ($element->getAttribute('name') == "left_0") 
        $element->nodeValue = null;// removing the text inside the parent element
        $h2 = new \DOMElement('h2', 'Title');// create a new h2 element
        $element->appendChild($h2);// appending the new h2 to the parent element
    

如果您想创建嵌套的 HTML 元素,您将通过为每个孩子和父母创建新的 DOMElement 并将每个孩子附加到其父母来从最后一个孩子开始。例如:

&lt;div&gt;&lt;h2&gt;H2&lt;h2/&gt;&lt;/div&gt;

你可以把它放在你的循环中:

$parentDiv = new \DOMElement('div', null);// the outer div
$childH2 = new \DOMElement('h2', 'H2');// the inner h2 tag
$parentDiv->appendChild($childH2); // append the h2 to div
$element->appendChild($parentDiv); // append the div with its children to the element

是的,当你输出时,你应该使用$html-&gt;saveHTML()

希望这会有所帮助。

【讨论】:

谢谢,那么输出多个嵌套标签呢?喜欢:

Title

Lorem ipsum...

@EdmondTamas 刚刚更新了我的答案,希望对您有所帮助:) 谢谢!最后一个问题,我如何输出包括?喜欢:$content = include 'content.php'。【参考方案2】:

在具有以下内容的标签中:&lt;h2&gt;Tom&lt;/h2&gt;TomnodeValueh2nodeName

你不能写信给nodeName。要创建一个新节点,你必须使用这个:

$html = new DOMDocument();
$html->loadHTML($content);

$elements = $html->getElementsByTagName('div');
foreach($elements as $element) 
  if ($element->getAttribute('name') == "left_0") 
    $newElement = $html->createElement('h2','Tom'); 
    $element->appendChild($newElement); 

如果你想附加嵌套标签,比如&lt;p&gt;&lt;h2&gt;Title&lt;/h2&gt;&lt;/p&gt;,你可以这样做:

$paragraph = $html->createElement('p');         // create outer <p> tag
$currentElement->appendChild($paragraph);       // attach it to parent element
$heading2 = $html->createElement('h2','Title'); // create inner <h2> tag
$paragraph->appendChild($heading2);             // attach that to the <p> tag

【讨论】:

谢谢,那么输出多个嵌套标签呢?喜欢:

Title

Lorem ipsum...

您必须记住或检索要附加新子节点的节点。基本上都是一样的:1.新建:$newElement = $html-&gt;createElement(&lt;name&gt;,&lt;value&gt;);,然后:2.追加:$currentElement-&gt;appendChild($newElement); 谢谢!最后一个问题,我如何输出包括?喜欢:$content = include 'content.php'。 @EdmondTamas 看看那里关于将一个文档导入另一个文档 - ***.com/questions/5735857/…

以上是关于PHP DOM:设置 nodeValue 时,代码未格式化,而是显示文字 HTML 标签的主要内容,如果未能解决你的问题,请参考以下文章

PHP nodevalue剥离html标签

PHP DOM textContent vs nodeValue?

Php - Dom,在 nodeValue 中插入 HTML_CODE

PHP DOM:获取没有后代节点的 Nodevalue

在 PHP 中,如何使用 querySelector 方法访问 dom 并打印出它的 nodeValue 或值?

PHP Simple HTML Dom:获取childNodes nodeValue?