0

首先,对不起我的英语。

我正在使用 HTML 解析器,我会跳过要解析的图像和其他可下载的东西。

我尝试了一些变化,这是最后一个:

    $doc = new DOMDocument();
    @$doc->loadHTMLFile("http://exampledomain.com/images/img3.JPG");
    if($doc->hasChildNodes){break;}

搜索解决方案后,我尝试了这个:

    $doc = new DOMDocument();
    @$doc->loadHTMLFile("http://exampledomain.com/images/img3.JPG");
    var_dump($doc->childNodes->length);
    foreach($doc->childNodes as $child){
        var_dump($child->nodeName);
    }

结果:

    2
    html
    html
  • 问题:一个jpg文件怎么可能有2个节点html?
  • 问题:如何跳过文件(jpg、exe、doc 等...非 html 文件)
4

1 回答 1

0

您可以在这里做的第一件事就是检查 jpg、gif、png、js 等的文件名,而不是尝试DOMDocument::loadHTMLFile在非 HTML 文件上运行。由于某种原因,该函数似乎试图加载所有内容(可能是因为它旨在处理无效的 HTML),因此您不能依赖函数的输出(true成功,false失败)。

这样的事情可能会有所帮助:

if (false === preg_match('/^.*\.(jpg|jpeg|png|gif)$/i', $file_name)) {
   $doc = new DOMDocument();
   $doc->loadHTMLFile($file_name);
   // more code here
}
于 2013-02-22T17:49:12.740 回答