0

定義された URL またはページからすべての CSS フォームを収集するスクリプトがあります。私はすべてを試しましたが、何らかの理由で、次のようなリンクされたスタイルシートを検出できません

<link rel="stylesheet" href="css/typography.css" /> 

考えられることはすべて試しました。これは、ページのCSSとインポートで収集する私が使用しているコードです。リンクシステムを追加するための助けは素晴らしいでしょう.

function scan($page_content){
    $i = 0;
    if(ereg("<style( *[\n]*.*)>\n*(.\n*)*<\/style>", $page_content)){
        if(preg_match_all("/(@\s*import\s* (url((\"|')?)?((\"|')?)|(\"|'){1}).+(\"|')?\)?)/", $page_content, $ext_stylesheets)){
            foreach($ext_stylesheets[0] as $stylesheet){
                $css_content[$i] = preg_replace("/(@\s*import\s*)|(url\(?((\"|')?))|(\"|'){1}|\)?(\"|')?;|(\s)/", "", $stylesheet);
                $i++;
            }
            $array = 1;
        }
        $inline_notused = $this->check_file($page_content, $page_content);
    }
    else die("No page styles, sorry!".$this->helptext);
}
4

1 に答える 1

1

これは DOM/XPath の良い方法です ( demo ):

function scan($html) {
    $dom = new DOMDocument;
    $dom->loadHTML($html);
    $path = new DOMXPath($dom);
    $nodes = $path->query('//style|//link');
    $style = '';
    foreach($nodes as $node) {
        if($node->tagName === 'style') {
            $style .= $node->nodeValue;
        } elseif($node->tagName === 'link') {
            $style .= "@import url('{$node->getAttribute('href')}')";
        } else {
            // Invalid
        }
        $style .= PHP_EOL;
    }
    return $style;
}
于 2012-10-14T05:58:46.370 に答える