PHP DOM Xpath - 试图从网站中提取 DOM - 未知编码错误

PHP DOM Xpath - trying to extract DOM from websites - unknown encoding error

我正在尝试从 PHP 中的网站提取 DOM,然后 运行 在其上提取一些 Xpath。代码应该很简单,但我不断收到编码错误。

我已经研究了错误消息并尝试使用 mb_convert_encoding() 应用编码(如其他堆栈溢出帖子中所述),但它没有解决问题。

我试图提取的网站使用 UTF-8,因此据我所知,使用 mb_convert_encoding() 函数应用 UTF-8 编码来解决问题没有多大意义。

这是我的代码,应该可以复制到别处。如您所见,我已经尝试了两种方法来在某些时候应用编码。

我想我使用的是正确的函数 loadHTML() 而不是 loadHTMLFile()。是否可以使用 file_get_contents 提取文件以将其提供给此函数?

<?php
  $url = 'http://duckduckgo.com/';
  
  if(! $file = file_get_contents($url) )
    echo 'File get contents failed.';

  $doc = new DOMDocument();

  //$doc->loadHTML( mb_convert_encoding($file,'HTML-ENTITIES','UTF-8') );
  $doc->loadHTML( '<?xml version="1.0" encoding="UTF-8"?>'.$file );

  $xpath = new DOMXpath($doc);

  $elements = $xpath->query("*/div[@id='logo_homepage_link']");

  if (!is_null($elements)) {
    foreach ($elements as $element) {
      echo "<br/>[". $element->nodeName. "]";

      $nodes = $element->childNodes;
      foreach ($nodes as $node) {
        echo $node->nodeValue. "\n";
      }
    }
  }                      
?>

错误是:

Warning: DOMDocument::loadHTML(): htmlCheckEncoding: unknown encoding UTF-8;charset=utf-8 in Entity, line: 11 in C:\Websites\domxpath\index.php on line 10

不确定这是错误还是功能,但代码反对行中的双重编码...

<meta http-equiv="content-type" content="text/html; charset=UTF-8;charset=utf-8">

如果你只用 UTF-8 替换它,它至少会通过这部分...

$file = str_replace("UTF-8;charset=utf-8", "UTF-8", $file);

只需将其放在 loadHTML() 行之前。