Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Удалить class и id из css-файла
Форумы портала PHP.SU » PHP » Регулярные выражения » Удалить class и id из css-файла

Страниц (1): [1]
 

1. seowin - 08 Апреля, 2015 - 15:30:43 - перейти к сообщению
Приветствую!

Задача такая: найти все классы (class) и индетификаторы (id) в css-Ффайле и проверить каждый, есть ли он в указанном html файле.
Если в html файле его нет, то корретно удалить из css-файла.

Написал следующий код:

PHP:
скопировать код в буфер обмена
  1. function serachClass ($id_class) {
  2.         GLOBAL $css;
  3.  
  4.         //Находим все классы
  5.         $sclid = "/\\" . $id_class . "[\w_-]+(\,|\{|\s+|\:)/i";
  6.         preg_match_all($sclid,$css,$serach_class);
  7.  
  8.         $css_repl = array("}", "{", ":", ",");
  9.         $rezult_css = array();
  10.         $rezult_css_go = array();
  11.  
  12.         //Очищаем массив
  13.         for($i = 0; $i < count($serach_class[0]); $i++) {
  14.         $rezult_css[] = trim(str_replace($css_repl, "", $serach_class[0][$i]));
  15.         }
  16.  
  17.         //Выделяем уникальные значения из массива
  18.         $rezult_css = array_unique($rezult_css);
  19.  
  20.         //Делаем конечный массив
  21.         foreach ($rezult_css as $key_val) {
  22.                 $rezult_css_go[] = trim(str_replace($id_class, "", $key_val));
  23.         }
  24.  
  25.         //Проверка существования класса(ID) в html-файле
  26.         $serch = file_get_contents("./rezult/default/result.tpl");
  27.  
  28.         for($i_serach = 0; $i_serach < count($rezult_css_go); $i_serach++) {
  29.        
  30.                 if($id_class == ".") {
  31.  
  32.                         if(preg_match("/class=\".*$rezult_css_go[$i_serach].*\"/", $serch)) {
  33.                        
  34.                         echo "Класс " . $rezult_css_go[$i_serach] . " найден в базе <br/>" ;
  35.                        
  36.                         } else {
  37.                                 $bvcbvc = "/[^\}]*?\\" . $id_class . $rezult_css_go[$i_serach] . "[^}]+\}/is";
  38.                                 $css = preg_replace($bvcbvc,'', $css);
  39.                         }
  40.                 } elseif($id_class == "#") {
  41.                         if(preg_match("/id=\".*$rezult_css_go[$i_serach].*\"/", $serch)) {
  42.                        
  43.                         echo "ID " . $rezult_css_go[$i_serach] . " найден в базе <br/>" ;
  44.                        
  45.                         } else {
  46.                                 $bvcbvc = "/[^\}]*?\\" . $id_class . $rezult_css_go[$i_serach] . "[^}]+\}/is";
  47.                                 $css = preg_replace($bvcbvc,'', $css);
  48.                         }
  49.                 }
  50.  
  51.         }
  52. }
  53.  
  54. serachClass(".");
  55. serachClass("#");


Классы и ID определяются верно.

Проблема в регулярке, которая удаляет в css-файле не найденные в html-коде классы и ID. Т.е. вот в этой:

PHP:
скопировать код в буфер обмена
  1. $bvcbvc = "/[^\}]*?\\" . $id_class . $rezult_css_go[$i_serach] . "[^}]+\}/is";
  2. $css = preg_replace($bvcbvc,'', $css);


Почему-то удаляется часть элементов, которые были найдены в html-файле.
К сожалению, не смог отследить закономерность.

Не могу понять, в чем моя ошибка?
2. esterio - 08 Апреля, 2015 - 16:14:15 - перейти к сообщению
велосипедостроение
https://unused-css[dot]com/
перваня ссилка по запросу delete unused css

 

Powered by ExBB FM 1.0 RC1