Php 解析用于CSS引用的HTML文件

Php 解析用于CSS引用的HTML文件,php,css,Php,Css,我有一个脚本,它假设从一个定义的url或页面收集所有css。我已经尝试了所有方法,但由于某些原因,它无法检测链接样式表,例如 <link rel="stylesheet" href="css/typography.css" /> 我已经尝试了我能想到的一切。这是我正在使用的代码,用于收集页面上的css和导入。任何添加链接系统的帮助都会很好 function scan($page_content){ $i = 0; if(ereg("<style( *[\

我有一个脚本,它假设从一个定义的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);
}
功能扫描($page\u内容){
$i=0;
如果(ereg(“\n*(.\n*)*”,$page\u content)){
如果(preg\u match\u all(“/(@\s*import\s*(url((\“\”)?)?((\“\”)?))(\“\”)(\“\”){1})。+(\“\”)?)/,$page\u content,$ext\u样式表)){
foreach($ext_样式表[0]作为$stylesheet){
$css_content[$i]=preg_replace(“/(@\s*import\s*))|(url\(((\“|”))|(\“|”){1}|\)(\“|”)?;(\s)/”,“,$样式表);
$i++;
}
$array=1;
}
$inline\u notused=$this->check\u文件($page\u content,$page\u content);
}
否则会死掉(“对不起,没有页面样式!”。$this->helptext);
}

这里有一个很好的DOM/XPath方法():


不要在HTML中使用正则表达式…使用DOM解析器。我相信您可以使用xPath而不是正则表达式来解析DOM?如果必须使用正则表达式,请不要使用ereg。它已被弃用,并将在某个时候从PHP中删除。您希望链接样式表的结果如何?您希望它们被
@import
编辑,还是希望脚本被删除样式的内容?看起来您需要解析导入的
元素并删除它们,而不是包含整个内容。@cHao啊,我只是更仔细地查看了代码,似乎他想要获得每个样式表URL。
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;
}