0

HTMLページのすべてのスクリプトタグのコンテンツを取得するために正規表現を使用しています。私が使用する正規表現とコードは次のようなものです:

$content = file_get_contents($url, false, stream_context_create(
                    array("http" => array("user_agent" => "any"))
            ));

$pattern = "/<script[^>]*?>([\s\S]*?)<\/script>/";
preg_match_all($pattern, $content, $inside_script_array);

echo "<pre>";
print_r($inside_script_array);
echo "</pre>";

1を取るとき。 >

$url = 'http://www.bestylish.com/' ;

それは私にすべてのスクリプトタグを返します。しかし、私が2を取るとき。>

$url = 'http://www.bestylish.com/sale' ;

上記の URL 1 に存在する同じタグが多数返信されません。その理由は何ですか?

4

1 に答える 1

4

その理由は、正規表現はHTMLを操作するための優れたツールではないためです。DOMパーサーに切り替えるオプションがまだある場合は、<script>タグのフェッチは次のように簡単にできます。

$domd = new DOMDocument();
libxml_use_internal_errors(true);
$domd->loadHTML(file_get_contents('http://www.google.com'));
libxml_use_internal_errors(false);

$items = $domd->getElementsByTagName('script');
$data = array();

foreach($items as $item) {
  $data[] = array(
    'src' => $item->getAttribute('src'),
    'outerHTML' => $domd->saveHTML($item),
    'innerHTML' => $domd->saveHTML($item->firstChild),
  );
}

print_r($data);
于 2012-06-25T10:01:11.713 に答える