Intereting Posts
Пользовательская маршрутизация URI по строке запроса с помощью CodeIgniter? Преобразование специальных символов Microsoft Word в PHP Конвертировать * (mp3, m4p и т.п.) в OGG через командную строку для совместимости с HTML5 Статические переменные PHP на нескольких страницах .php Есть ли какой-либо Идентичный оператор === в C, как в PHP? Динамическое создание строк и столбцов с помощью PHP и HTML Как перейти от php MySQL sql инъекции уязвимых запросов к MySQLi не уязвимых запросов ничего не отображается, когда класс находится в php-коде Запрос по запросу Symfony2 Doctrine PHP: невозможно передать одиночную кавычку в mysqli query Сохранение моего соединения PDO в качестве глобальной переменной Предупреждение: mysql_query () ожидает, что параметр 2 будет ресурсом Как удалить public / index.php из url в laravel 5? Как объединить числа в одну группу Любой надежный API, доступный для определения города и страны пользователя с IP-адреса

PHP Parser для PHP – объявления селектора для строки

Я хочу, чтобы иметь возможность читать CSS-файл и иметь возможность извлекать все объявления данного селектора в строку. Например, учитывая следующую таблицу стилей:

h1 { font-size: 15px; font-weight: bold; font-style: italic; font-family: Verdana, Arial, Helvetica, sans-serif; } div.item { font-size: 12px; border:1px solid #EEE; } 

Я хочу, чтобы иметь возможность звонить и получать div.item, что-то вроде:

 $css->getSelector('div.item'); 

Который должен дать мне строку вроде:

 font-size:12px;border:1px solid #EEE; 

Я смотрю вокруг, но не могу найти парсер, который может это сделать. Есть идеи?

FYI: Мне нужно это, чтобы иметь возможность конвертировать селектора из CSS и динамически вставлять стили в элементы HTML в сообщениях электронной почты.

РЕШЕНИЕ РЕДАКТИРОВАНИЯ: Я придумал свое собственное сырое решение и создал класс, чтобы делать то, что я искал. См. Мой собственный ответ ниже.

    Я думаю, это то, что вы ищете:

    http://classes.verkoyen.eu/css_to_inline_styles

    CssToInlineStyles – это класс, который позволяет вам конвертировать HTML-страницы / файлы в HTML-страницы / файлы со встроенными стилями. Это очень полезно при отправке писем. Я использую его прямо сейчас и отлично работает.

    Пример использования некоторых методов:

     $html = file_get_contents('blue.html'); 

    // мои стили хранятся внутри html

     $cssConverter = new CSSToInlineStyles(); $cssConverter->setCleanup(true); $cssConverter->setHTML($html); $cssConverter->convert(true); $cssConverter->setUseInlineStylesBlock(true); $new_html = $cssConverter->convert(); 

    Я придумал свое собственное грубое решение и создал класс, чтобы делать то, что я искал. На мои источники ссылаются внизу.

     class css2string { var $css; function parseStr($string) { preg_match_all( '/(?ims)([a-z0-9, \s\.\:#_\-@]+)\{([^\}]*)\}/', $string, $arr); $this->css = array(); foreach ($arr[0] as $i => $x) { $selector = trim($arr[1][$i]); $rules = explode(';', trim($arr[2][$i])); $this->css[$selector] = array(); foreach ($rules as $strRule) { if (!empty($strRule)) { $rule = explode(":", $strRule); $this->css[$selector][trim($rule[0])] = trim($rule[1]); } } } } function arrayImplode($glue,$separator,$array) { if (!is_array($array)) return $array; $styleString = array(); foreach ($array as $key => $val) { if (is_array($val)) $val = implode(',',$val); $styleString[] = "{$key}{$glue}{$val}"; } return implode($separator,$styleString); } function getSelector($selectorName) { return $this->arrayImplode(":",";",$this->css[$selectorName]); } } 

    Вы можете запустить его следующим образом:

     $cssString = " h1 { font-size: 15px; font-weight: bold; font-style: italic; font-family: Verdana, Arial, Helvetica, sans-serif; } div.item { font-size: 12px; border:1px solid #EEE; }"; $getStyle = new css2string(); $getStyle->parseStr(cssString); echo $getStyle->getSelector("div.item"); 

    Выходной сигнал будет следующим:

     font-size:12px;border:1px solid #EEE 

    Это решение работает даже с комментариями в вашем файле CSS, если комментарии не включены в селектор.

    Ссылки: http://www.php.net/manual/en/function.implode.php#106085 http://stackoverflow.com/questions/1215074/break-a-css-file-into-an-array-with -PHP