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()

次に、5.3.6 以上のバージョンの PHP を使用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 の有益なコメント に従って、5.3.6 より前の PHP バージョンで使用DOMDocument::saveXML()して、(元の HTML の実際のコンテンツに応じて) 許容できる結果を得ることができます。

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