是否可以从HTML中提取内联CSS?

时间:2011-01-22 17:10:57

标签: php html css dom

使用http://simplehtmldom.sourceforge.net/manual.htm,是否可以提取HTML文件的内联CSS?

这个解析器如果纯html,假设(如果我错了就纠正我)它无法解析CSS标签。还有其他方法可以在html文件中提取内联CSS吗?

4 个答案:

答案 0 :(得分:3)

如果你真的需要使用simplehtmldom来提取它:


对于

<style>
...
</style>

使用:

$css = $html->find('style')->innertext;

对于

<div style="background:blue; color:white;"></div>

使用:

$css = $html->find('div[style]')->style;

如果有多个divstyle属性或多个<style>,您可以使用foreach在它们之间循环。


解析样式:

PHP中的

$s = 'background:blue; color:white;';

$results = [];
$styles = explode(';', $s);

foreach ($styles as $style) {
    $properties = explode(':', $style);
    if (2 === count($properties)) {
        $results[trim($properties[0])] = trim($properties[1]);
    }
}

var_dump($results);
JS中的

let s = 'background:blue; color:white;';

let results = {};
let styles = s.split(";");

for (let style in styles) {
    let properties = styles[style].split(":");
  if (properties.length === 2) {
    results[properties[0].trim()] = properties[1].trim();
  }
}

console.log(results);

https://jsfiddle.net/zyfhtwj2/

答案 1 :(得分:1)

这应该有效:

$doc = new DOMDocument();
$doc->loadHTML('<html><body style="color: red"></body></html>');

$els = $doc->getElementsByTagName('*');

for($i = 0; $i < $els->length; $i++)
  echo $els->item($i)->getAttribute('style'); // color: red

答案 2 :(得分:1)

使用普通的HTML解析器:

  1. 浏览所有元素
  2. 如果元素的标记为style,请获取元素的内容
  3. 如果元素具有属性style,请获取该属性的值。

答案 3 :(得分:0)

find('css','div[style*="display:block;"] ')

通过这种方式,您可以找到属性为display:block的样式。根据需要修改它,你可以获得内联CSS。