2010-07-10 5 views
1

Comment devrait analyser avec PHP (simple html dom/etc ..) fond et d'autres images de la page Web?Comment devrait analyser avec les images de fond PHP (simple html dom parser) et d'autres images de la page Web?

cas 1: inline css

<div id="id100" style="background:url(/mycar1.jpg)"></div> 

cas 2: css à l'intérieur de la page html

<div id="id100"></div> 

<style type="text/css"> 
#id100{ 
background:url(/mycar1.jpg); 
} 
</style> 

cas 3: fichier CSS séparé

<div id="id100" style="background:url(/mycar1.jpg);"></div> 

External.css

#id100{ 
background:url(/mycar1.jpg); 
} 

Cas 4: image à l'intérieur balise img

solution au cas 4 tel qu'il apparaît dans php simple html dom parser:

// Create DOM from URL or file 
$html = file_get_html('http://www.google.com/'); 

// Find all images 
foreach($html->find('img') as $element) 
     echo $element->src . '<br>'; 

S'il vous plaît aidez-moi analyser le cas 1,2,3.

S'il existe d'autres cas s'il vous plaît écrivez-les, avec soltion si vous le pouvez s'il vous plaît.

Merci

+0

Obtenir le contenu de fichiers HTML avec des bibliothèques comme DOM a été répondu à de nombreuses reprises (y compris aujourd'hui). Les fichiers CSS externes ne peuvent pas être traités par une bibliothèque SGML/XML. Notez également que le contenu du nœud n'est que des données de caractères pour ces bibliothèques. Vous devez trouver un analyseur supplémentaire si vous voulez analyser le contenu en CSS. – Gordon

Répondre

2

Pour le cas 1:

// Create DOM from URL or file 
$html = file_get_html('http://www.google.com/'); 

// Get the style attribute for the item 
$style = $html->getElementById("id100")->getAttribute('style'); 

// $style = background:url(/mycar1.jpg) 
// You would now need to put it into a css parser or do some regular expression magic to get the values you need. 

Pour le cas 2/3:

// Create DOM from URL or file 
$html = file_get_html('http://www.google.com/'); 

// Get the Style element 
$style = $html->find('head',0)->find('style'); 

// $style now contains an array of style elements within the head. You will need to work out using attribute selectors what whether an element has a src attribute, if it does download the external css file and parse (using a css parser), if it doesnt then pass the innertext to the css parser. 
1

Pour extraire <img> de la page que vous pouvez essayer quelque chose comme:

$doc = new DOMDocument(); 
$doc->loadHTML("<html><body>Foo<br><img src=\"bar.jpg\" title=\"Foo bar\" alt=\"alt\"></body></html>"); 
$xml = simplexml_import_dom($doc); 
$images = $xml->xpath('//img'); 
foreach ($images as $img) 
    echo $img['src'] . ' ' . $img['alt'] . ' ' . $img['title']; 

Voir doc pour DOMDocument pour plus de détails.

+0

DOMElement implémente/autorise ArrayAccess? – Gordon

+0

J'écris déjà une solution pour img tag ma réponse uniquement pour l'image de fond css – Yosef

Questions connexes