Можно ли извлечь встроенный CSS из HTML? - PullRequest
0 голосов
/ 22 января 2011

Используя http://simplehtmldom.sourceforge.net/manual.htm, возможно ли извлечь встроенный CSS из HTML-файла?

Этот синтаксический анализатор, если он чистый HTML, предполагая (просто поправьте меня, если я ошибаюсь), он не можетпарсинг тэгов CSS. Есть ли другой способ извлечь встроенный CSS в html-файл?

Ответы [ 4 ]

3 голосов
/ 22 января 2011

Если вам действительно нужно использовать simplehtmldom для извлечения этого:


Для

<style>
...
</style>

Использование:

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

Для

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

Использование:

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

Если имеется более одного div с атрибутом style или более одного <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 голос
/ 22 января 2011

Использование обычного анализатора HTML:

  1. Пройдите через все элементы
  2. Если тег элемента style, получить содержимое элемента
  3. Если элемент имеет атрибут style, получить значение этого атрибута.
1 голос
/ 22 января 2011

Это должно работать:

$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
0 голосов
/ 19 июня 2017
find('css','div[style*="display:block;"] ')

Таким образом, вы можете найти стиль с атрибутом display:block. Измените это, как вы хотите, и вы можете получить встроенный CSS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...