解析CSS引用的HTML文件

时间:2012-10-11 19:26:32

标签: php css

我有一个脚本,可以从定义的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);
}

1 个答案:

答案 0 :(得分: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;
}