首页 > 解决方案 > PHP DOM Xpath - 试图从网站中提取 DOM - 未知的编码错误

问题描述

我正在尝试从 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";
      }
    }
  }                      
?>

错误是:

警告:DOMDocument::loadHTML(): htmlCheckEncoding: 未知编码 UTF-8;charset=utf-8 in Entity, line: 11 in C:\Websites\domxpath\index.php on line 10

标签: phpxmldomxpathdomxpath

解决方案


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

<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()行之前。


推荐阅读