Advertisement
IvanStels

Чистка css-стилей при помощи PHP

Aug 18th, 2020
2,079
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.12 KB | None | 0 0
  1. <?php
  2.             $css_rules = array();
  3.             $css_end_rules = array();
  4.             $css_end_rules_done = array();
  5.             $css_start = file_get_contents("path/to/css.stylesheet");
  6.             $css = $css_start;
  7.            
  8.             while(strpos($css,'media') !== FALSE) {
  9.                 $stop = false;
  10.                 preg_match("/(@(.+){(.+){(.+);\s?}}){1}/mU",$css,$matches);
  11.                 $css = str_replace($matches[0],'',$css);
  12.                
  13.                 foreach($matches as $k=>$v) { if($v != $matches[0] && !$stop) {
  14.                     $nk = '@'.$v;
  15.                     if(!$css_rules[$nk]) $css_rules[$nk] = '';
  16.                     $css_rules[$nk] = $css_rules[$nk].trim(substr(str_replace($nk,'',$matches[0]),1,-1));
  17.                     $stop = true;
  18.                 } }
  19.            
  20.             }
  21.             $css_rules['regular'] = $css;
  22.                
  23.             $i = 0;
  24.             foreach($css_rules as $k=>$v) { if($i == 0) { $i++; } else {
  25.                 $new_css_parts = explode('}',$v);
  26.                 foreach($new_css_parts as $ncpk=>$ncpv) {
  27.                     $new_css_rules = explode('{',$ncpv);
  28.                     if(!$css_end_rules[$k][$new_css_rules[0]] && $new_css_rules[1]) $css_end_rules[$k][$new_css_rules[0]] = '';
  29.                     if($new_css_rules[1]) $css_end_rules[$k][trim($new_css_rules[0])] = $css_end_rules[$k][$new_css_rules[0]].trim($new_css_rules[1]);
  30.                 }
  31.             } }
  32.                
  33.             foreach($css_end_rules as $k=>$v) {
  34.                 $nk = (substr($k,-1)==' ')?substr($k,0,strlen($k)-1):$k;
  35.                 if(!is_array($css_end_rules_done[trim($nk)])) $css_end_rules_done[trim($nk)] = array();
  36.                
  37.                 foreach($v as $id=>$css_group) {
  38.                     if(!$css_group) {
  39.                         unset($v[$id]);
  40.                     } else {
  41.                         $nid = (substr($id,-1)==' ')?substr($id,0,strlen($id)-1):$id;
  42.                         if(!is_array($css_end_rules_done[$nk][trim($nid)])) $css_end_rules_done[$nk][trim($nid)] = array();
  43.                         $groups = explode(';',$css_group);
  44.                        
  45.                         foreach($groups as $gv) {
  46.                             $rule = explode(':',$gv);
  47.                             if(trim($rule[0]) && trim($rule[1]) && strpos($rule[0],'//')===FALSE) $css_end_rules_done[$nk][$id][trim($rule[0])] = trim($rule[1]);
  48.                         }
  49.                     }
  50.                 }
  51.             }
  52.            
  53.             arsort($css_end_rules_done);
  54.            
  55.             $regular_css = $css_end_rules_done['regular'];
  56.             unset($css_end_rules_done['regular']);
  57.            
  58.             $tab = "    ";
  59.             $double_tab = $tab.$tab;
  60.             $triple_tab = $tab.$double_tab;
  61.             $end_css_style = "";
  62.             foreach($css_end_rules_done as $group_media=>$rules) {
  63.                 $end_css_style = $end_css_style.trim($group_media." {").PHP_EOL;
  64.                
  65.                 foreach($rules as $id=>$rule) {
  66.                     $end_css_style = $end_css_style.$tab.trim($id." {").PHP_EOL;
  67.                    
  68.                     foreach($rule as $param=>$value) {
  69.                         $end_css_style = $end_css_style.$double_tab.$param.": ".trim($value).";".PHP_EOL;
  70.                     }
  71.                    
  72.                     $end_css_style = $end_css_style.$tab."}".PHP_EOL;
  73.                 }
  74.                
  75.                 $end_css_style = $end_css_style."}".PHP_EOL;
  76.             }
  77.            
  78.             foreach($regular_css as $id=>$rule) {
  79.                 $end_css_style = $end_css_style.trim($id." {").PHP_EOL;
  80.                
  81.                 foreach($rule as $param=>$value) {
  82.                     $end_css_style = $end_css_style.$tab.$param.": ".trim($value).";".PHP_EOL;
  83.                 }
  84.                
  85.                 $end_css_style = $end_css_style."}".PHP_EOL;
  86.             }
  87.             echo '<pre>';
  88.             echo $end_css_style;
  89.             echo '</pre>';
  90.            
  91.             /*
  92.             echo '<pre>';
  93.             print_r($css_end_rules_done);
  94.             echo '</pre>';
  95.             */
  96.                
  97.             //echo '<br>';
  98.             //echo $css_start;
  99. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement