0

我正在使用 SIMPLE_HTML_DOM 测试解析器,并在解析从该 URL 返回的 HTML DOM 时:HERE

它没有找到 H1 元素...我尝试成功返回所有 div。

我正在使用一个简单的请求来诊断此问题:

foreach($html->find('H1') as $value) { echo "<br />F: ".htmlspecialchars($value); } 

在查看源代码时,我意识到:

  • h1 是大写 -> H1 - 但 SIMPLE_HTML... 正在处理:

                //PaperG - If lowercase is set, do a case insensitive test of the value of the selector.
            if ($lowercase) {
                $check = $this->match($exp, strtolower($val), strtolower($nodeKeyValue));
            } else {
                $check = $this->match($exp, $val, $nodeKeyValue);
            }
            if (is_object($debugObject)) {$debugObject->debugLog(2, "after match: " . ($check ? "true" : "false"));}
    

任何机构都可以帮助我了解这里发生了什么吗?

4

2 回答 2

0

尝试这个

        $oHtml = str_get_html($html);
        foreach($oHtml->find('h1') as $element)
        {
            echo $element->innertext;
        }

您还将使用正则表达式跟随函数返回所有 h1 标记的内部文本的数组

  function getH1($yourhtml)
{
    $h1tags = preg_match_all("/(<h1.*>)(\w.*)(<\/h1>)/isxmU", $yourhtml, $patterns);
    $res    = array();
    array_push($res, $patterns[2]);
    array_push($res, count($patterns[2]));
    return $res;
}
于 2013-09-20T05:45:27.563 回答
0

找到了...

但是不能解释!

我用包括 H1(大写)在内的另一个代码进行了测试,它工作正常。

在使用 SIMPLE_HTML_DOM 代码时,我评论了“remove_noise”,现在它运行良好,我认为这是因为该网站具有无效的 HTML,并且噪声去除器去除了太多并且在结束标记脚本之后没有结束:

    // $this->remove_noise("'<\s*script[^>]*[^/]>(.*?)<\s*/\s*script\s*>'is");
    // $this->remove_noise("'<\s*script\s*>(.*?)<\s*/\s*script\s*>'is");

谢谢大家的帮助。

于 2013-03-25T05:46:39.380 回答