@Kanaris

Чем парсить CSS при помощи php?

Нужно превратить строку правил цсс (т.е. значение аттрибута style="") в массив формата ['rule'=>'value'].
explode(';',$style) не предлагать, потому что:

background-image: url("data:image/gif;base64,...
  • Вопрос задан
  • 1293 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
https://github.com/sabberworm/PHP-CSS-Parser

В целом же задачу можно реализовать в 20-30 строк, как уже говорилось, путем написания своего примитивного парсера посимвольного (с регулярками). Но это ж писать надо... и не факт что мы покроем все кейсы.

но если вам скучно, то вот вам набросок идеи, кривой и не красивый...
<?php

$styles = "background : 'te;st'; font-size: 12px";

parse($styles); // ["background", "'te;st'", "font-size", "12px"]

function parse($rawStyles) {
    $styles = rtrim($rawStyles, ';') . ';';
    $isInString = false;
    $offset = 0;
    $chunks = [];
    $lastChunkOffset = 0;
    while(preg_match('/[:;\'\"]/', $styles, $matches, PREG_OFFSET_CAPTURE, $offset)) {
        $offset = $matches[0][1] + 1;
        $char = $matches[0][0];
        if ($isInString && !in_array($char, ['\'', '"'])) {
            continue;
        }
        if (in_array($char, ['\'', '"'])) {
            $isInString =  !$isInString;
            continue;
        }

        $chunks[] = trim(mb_substr($styles, $lastChunkOffset, $offset - $lastChunkOffset-1));

        $lastChunkOffset = $offset;
    }

    return $chunks;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы