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