0

SIMPLE_HTML_DOMを使用してパーサーをテストしており、このURLから返されたHTML DOMを解析している間:ここに

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

それを見つけた...

しかし、それを説明することはできません!

H1(大文字)を含む別のコードでテストしたところ、機能しました。

SIMPLE_HTML_DOMコードで遊んでいるときに、「remove_noise」にコメントしましたが、完全に機能するようになりました。これは、このWebサイトの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 に答える
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 に答える