2012-03-10 3 views
-1

Undefined offset Je suis en train d'analyser par css en utilisant php J'utilise un analyseur css de ce lien: http://www.phpclasses.org/browse/file/4684.html, mais je continue à recevoir ce message d'erreur :Parsing CSS en utilisant erreur PHP 1

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

Le code J'utilise est comme suit

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"); 
} 

cela va chercher l'attribut href et utiliser l'attribut de ceci pour récupérer le fichier css qui devrait ensuite être analysés et traités par erreur ci-dessus, mais se produit. Toute aide serait très appréciée?

+0

Une erreur indique que le problème est dans cssparser.php. Que diriez-vous de poster * ce * code à la place?:) – SenorAmor

Répondre

1

ligne 106 de cssparser.php dit:

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

Le explode() génère l'erreur de décalage Indéfini. Cela signifie que le fichier css analysé est dans une déclaration invalide quelque part et qu'il manque :. L'éclatement ne peut pas trouver : en $code.

Maintenant, c'est juste une hypothèse (vous n'avez pas fourni le fichier .css réel), mais le fichier peut avoir un contenu non valide, quelque chose comme ceci:

.classdefinition { 
    color #000000; 
} 

Il y a un : manquant entre color et #000000 .

Je ne pense pas qu'un commentaire est le problème, car à première vue, la classe prend soin de les ignorer.

Essayez de transmettre le fichier css via un CSS validator.

Si la syntaxe CSS est OK, la classe a un bug.

Maintenant, si nous avons tous deux le même (dernière) version de cssparser.php, un patch rapide serait de remplacer les lignes 106-109 avec:

$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]); 
} 

Mais encore une fois, cela ne garantit pas CSS valide sera analysé correctement et que cette classe est sans erreur.

Et que je n'ai pas vraiment testé ou travaillé avec la classe, tout ce qui est suggéré ici est juste en regardant le code que vous avez posté et le code de la classe.

modifier plus tard:

Lors d'une recherche rapide Google, je l'ai trouvé PHP-CSS-Parser qui ressemble plus complète et robuste, et il est hébergé sur GitHub (pour que les autres puissent y contribuer).

Une autre édition:

Vérifiez également this answer ici, semble assez simple, mais comme dit l'auteur, ne gère pas les commentaires sélecteurs à l'intérieur.

J'espère que cela a aidé.

+0

Salut talereader, je regardais et je me demandais comment vous attraperiez la couleur de l'étiquette du corps? – Elbento

+0

Hmm, j'ai un peu joué avec ça et je n'arrive pas à comprendre comment extraire un sélecteur individuel de cet objet. C'est trop complexe. Et il semble que les sélecteurs individuels sont dans sa liste TO DO. – talereader

+0

Le correctif de 'cssparser.php' n'a-t-il pas fonctionné? – talereader