Bonjour,
Voila j'essaye de parser du code html pour qu'il soit valide pour intant article de facebook
j'essaye entourer mes balise image avec des balise figure et si il y a une source je lui ajoute une balise enfant <figcaption><cite>xxx</figcation></cite>
voice mon code de test
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$html = <<<EOF
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
<img src="xxxxx1" />
<span class="sourceimgtest">x1</span>
</p>
<p>
<img src="xxxxx2">
</p>
<p>
<img src="xxxxx3">
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
<img src="xxxxx4">
<span class="sourceimgtest">x4</span>
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
<img src="xxxxx5">
</p>
<p>
<img src="xxxxx6">
<img src="xxxxx7">
<span class="sourceimgtest">x7</span>
<img src="xxxxx8">
<span class="sourceimgtest">x8</span>
</p>
EOF;
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$matches = $xpath->query('//p');
if($matches->length > 0 ){
foreach($matches as $node){
$node_img_match = $node->getElementsByTagName('img');
if($node_img_match->length > 0){
$i = 0;
foreach( $node_img_match as $node_img){
//echo $node_img_match->getAttribute('src').'<br />';
$figure_node = $dom->createElement('figure');
$figure_node->appendChild($node_img->cloneNode());
if($node->getElementsByTagName('span')[$i+1]) {
$figCaption_node = $dom->createElement('figcaption');
$cite_node = $dom->createElement('cite',$node->getElementsByTagName('span')[$i]->nodeValue);
$figCaption_node->appendChild($cite_node);
$figure_node->appendChild($figCaption_node);
}
$node->replaceChild($figure_node,$node_img);
$i++;
}
}
}
}
$contenu = $dom->saveHTML();
echo $contenu;
Voici ce que je souhaite en sortie
<html>
<body>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
<figure><img src="xxxxx1">
<figcaption><cite>x1</cite>
</figcaption>
</figure><span class="sourceimgtest">x1</span>
</p>
<p>
<figure><img src="xxxxx2">
</figure>
</p>
<p>
<figure><img src="xxxxx3">
</figure>
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
<figure><img src="xxxxx4">
<figcaption><cite>x4</cite>
</figcaption>
</figure><span class="sourceimgtest">x4</span>
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
<figure><img src="xxxxx5">
</figure>
</p>
<p>
<figure>
<img src="xxxxx6">
<figure>
<figure>
<img src="xxxxx7">
<figcaption>
<cite>x7</cite>
</figcaption>
<figure>
<figure>
<img src="xxxxx8">
<figcaption>
<cite>x8</cite>
</figcaption>
<figure>
</p>
</body>
</html>
Les premieres balises sont bien entourées mais pas les dernieres et je comprends pas pouquoi
<html>
<body>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
<figure>
<img src="xxxxx1">
<figcaption>
<cite>x1</cite>
</figcaption>
</figure><span class="sourceimgtest">x1</span>
</p>
<p>
<figure>
<img src="xxxxx2">
</figure>
</p>
<p>
<figure>
<img src="xxxxx3">
</figure>
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
<figure>
<img src="xxxxx4">
<figcaption>
<cite>x4</cite>
</figcaption>
</figure>
<span class="sourceimgtest">x4</span>
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
<figure>
<img src="xxxxx5">
</figure>
</p>
<p>
<figure>
<img src="xxxxx6">
<figcaption>
<cite>x7</cite>
</figcaption>
</figure>
<figure>
<img src="xxxxx7">
<figcaption>
<cite>x8</cite>
</figcaption>
</figure>
<span class="sourceimgtest">x7</span>
<figure>
<img src="xxxxx8">
</figure>
<span class="sourceimgtest">x8</span>
</p>
</body>
</html>