Синтаксический анализ CSS с помощью ошибки PHP неопределенного смещения 1 - PullRequest
0 голосов
/ 10 марта 2012

Я пытаюсь проанализировать css с помощью php. Я использую синтаксический анализатор css по этой ссылке: http://www.phpclasses.org/browse/file/4684.html,, но постоянно получаю это сообщение об ошибке:

Notice: Undefined offset: 1 in C:\wamp\www\Thesis\cssparser-2003-09-20\cssparser.php on line 106

Код, который я используювыглядит следующим образом

include_once('cssparser-2003-09-20/cssparser.php');

foreach($html->find('link') as $link)
{
   $href = $link->getAttribute('href');
   $css = new cssparser();
   $css->Parse($href);
   echo $css->Get("body","color");
}

При этом будет выполняться поиск атрибута href и использование этого атрибута для получения файла CSS, который затем должен быть проанализирован, но возникла ошибка выше.Любая помощь будет высоко ценится?

1 Ответ

1 голос
/ 10 марта 2012

Строка 106 из cssparser.php говорит:

list($codekey, $codevalue) = explode(":",$code);

explode() генерирует ошибку Неопределенное смещение .Это означает, что анализируемый файл css где-то содержит недопустимый оператор и отсутствует :.Разнесение не может найти : в $code.

Теперь это всего лишь предположение (вы не предоставили фактический файл .css), но файл может содержать недопустимое содержимое, напримерВот это:

.classdefinition {
  color #000000;
}

Между color и #000000 отсутствует :.

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

Попробуйте передать файл css через валидатор CSS .

Если синтаксис CSS в порядке, значит класс содержит ошибку.

Теперь, если у нас обоих одинаковая (последняя) версия cssparser.php, быстрый патч будет заменить строки 106-109 на:

$arr = explode(":", $code);
if (count($arr) == 2 && strlen(trim($arr[0])) > 0 && strlen(trim($arr[1])) > 0) {
  $this->css[$key][trim($arr[0])] = trim($arr[1]);
}

Но опять же, это не гарантируетневерный CSS будет проанализирован правильно, и этот класс не содержит ошибок.

И помните, что я на самом деле не тестировал и не работал с классом, все, что здесь предлагается, это просто посмотреть на код, который вы разместили, икод класса.

Позже отредактируйте:

При быстром поиске в Google яound PHP-CSS-Parser , который выглядит более полным и надежным и размещен на Github (чтобы другие могли внести в него свой вклад).

Другое редактирование:

Также отметьте этот ответ здесь, выглядит достаточно просто, но, как говорит автор, не обрабатывает комментарии внутри селекторов.

Надеюсь, это помогло.

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