0

我在检索包含类名“tabEmbed”的特定 div 的 HTML 时遇到了一些问题

该代码有效,但由于某种原因,它只返回 txt ...没有 HTML。所有的文本格式都被删除了……通常也应该有嵌入代码。我错过了什么?

    $dom = new DOMDocument;
    @$dom->loadHTML($Video_Source_HTML);
    $Div_Data           = $dom->getElementsByTagName('div');

    foreach($Div_Data as $Div) {
     if ($Div->getAttribute('id') === 'tabEmbed') {
      $Embed_HTML = $Div->nodeValue;
      if(preg_match('/<input type="text"(.*?)">/is', $Embed_HTML, $Embed)) {
       $Embed_Code = $Embed[1];
      }
     }
    }

网站视频嵌入代码源

      <div id="tabEmbed" class="tab">
        <h3 class="blackTitle">Embed this video to your site with this code:</h3>

        <input type="text" name="media_embed_code" id="mediaEmbedCodeInput" size="110" onclick="this.focus();this.select();" value="&lt;iframe src=&quot;&quot; frameborder=0 width=510 height=400 scrolling=no&gt;&lt;/iframe&gt;">
      </div>

$Embed_HTML 来源:
使用以下代码将此视频嵌入您的网站:

4

1 回答 1

2

DOMDocument::getElementById()首先,您可以通过使用而不是使用来大大简化您的代码DOMDocument::getElementsByTagName()

然后,如果您使用的 PHP 版本等于或高于 5.3.6,则可以使用DOMDocument::saveHTML()输出节点的“outerHTML”,如下所示:

$dom = new DOMDocument;
@$dom->loadHTML( $Video_Source_HTML );

// let's use getElementById() in stead of getElementsByTagName()
$div = $dom->getElementById( 'tabEmbed' );

// be sure to check your browser's source code, or output this as text/plain
echo $dom->saveHTML( $div );

而且,根据GordonM 的有用评论,您可以DOMDocument::saveXML()在 5.3.6 之前的 PHP 版本中使用,以获得可接受的结果(取决于原始 HTML 的实际内容),如下所示:

echo $dom->saveXML( $div );
于 2012-11-17T17:27:28.323 回答