PHP通过LoadHTML从Div加载内容

PHP通过LoadHTML从Div加载内容,php,Php,我在检索包含类名“tabEmbed”的specefic div的HTML时遇到一些问题 代码可以工作,但由于某些原因,它只返回txt。。。没有HTML。所有的文本格式都被删除了。。。通常也应该有嵌入代码。我错过了什么 $dom = new DOMDocument; @$dom->loadHTML($Video_Source_HTML); $Div_Data = $dom->getElementsByTagName('div');

我在检索包含类名“tabEmbed”的specefic 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];
      }
     }
    }
$dom=新的DOMDocument;
@$dom->loadHTML($Video\u Source\u HTML);
$Div_Data=$dom->getElementsByTagName('Div');
foreach($Div_数据为$Div){
如果($Div->getAttribute('id')=='tabEmbed'){
$Embed_HTML=$Div->nodeValue;

如果(preg_)首先匹配('/),您可以通过使用而不是使用来大大简化代码

然后,如果您使用的PHP版本等于或高于5.3.6,则可以使用输出节点的“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 );
echo $dom->saveXML( $div );
并且,根据,您可以在5.3.6之前的PHP版本中使用,以获得可接受的结果(取决于原始HTML的实际内容),如下所示:

$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 );
echo $dom->saveXML( $div );

你是说
$Embed\u HTML
是空的,而
$Embed\u code
不是空的吗?另外,你可以使用
DOMDocument::getElementById()
来简化你的代码,而不是使用
DOMDocument::getElementsByTagName()
就像你现在所做的那样-在正确、有效的HTML中,只有一个元素具有特定的id。问题是$Embed_HTML=$Div->nodeValue;不是显示Div中的所有代码,而是显示文本,我如何解决这个问题?为什么不使用getElementById,而不是所有的业务来处理所有的divs?我尝试了$Div_test=$dom->getElementById('tabEmbed');echo$Div_test->nodeValue;但仍然没有显示Div中的完整html代码,只是显示了text@MihaiViteazu不客气。当您觉得您收到的问题答案足够多时,请将我的答案标记为最佳(单击复选标记)如果您认为我的答案最能解决您的问题。在5.3.6以下,我认为您仍然可以使用saveXML()获得可接受的结果?@GordonM很好。谢谢您,我冒昧地将此添加到我的答案中。完成感谢所有人的帮助,我现在可以使用preg_match做得更好