Php 解析用于CSS引用的HTML文件
我有一个脚本,它假设从一个定义的url或页面收集所有css。我已经尝试了所有方法,但由于某些原因,它无法检测链接样式表,例如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( *[\
<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;
}