1. La solution donnée par stealth35 - utiliser le DOM - est efficace et ne devrait pas te prendre trop de temps.
En plus, la logique est simple à comprendre :
- Tu ouvres un fichier (x)HTML (avec
loadHTMLFile()
- Tu récupères les éléments
img (avec
getElementsByTagName())
- Pour chaque élément récupéré, tu récupères l'attribut
src (avec
getAttribute())
Tu dis que ce n'est pas ton métier. Si j'étais méchant, je te dirais de demander à quelqu'un dont c'est le métier - et de le payer
Mais tu as de la chance, je suis de bonne humeur...
- Si je bidouille, celui-ci est meilleur même si je ne comprends pas tout !
C'est pour ça que ça ne fonctionne pas !
Les expressions régulières, c'est quelque chose de carré. Si tu ne comprends pas ce que tu demandes, il y a peu de chances que ça fonctionne correctement
Exemple du premier pattern :
<img(.*)src="(.*)" (.*)>
Tu cherches ce qui commences par
<img, puis 0 ou plusieurs caractères quelconques (qu'il stockera dans un premier élément), puis
src=", puis 0 ou plusieurs caractères quelconques (qu'il stockera dans un deuxième élément), puis
" (guillemet + espace), puis 0 ou plusieurs caractères quelconques (qu'il stockera dans un troisième élément), puis
>.
=> pour
<img src="Tarata.jpg" width="181" height="361">, il va prendre :
<img, puis " " (un espace, stocké dans le premier élément), puis
src=", puis
Tarata.jpg" width="181 (stocké dans le deuxième élément), puis
" (guillemet + espace), puis
height="361" (stocké dans le troisième élément), puis
>.
Et sinon, je persiste : apprends à chercher !
Une recherche sur google avec les mots clés "php récupérer image balise html" te donne la réponse
Puisque tu n'as toujours pas appris à chercher,
Solution trouvée en première page de Google :
$texte = 'des trucs <img src="image.jpg" /> des machins';
$texte = "des trucs <img src='/image.jpg' /> des machins";
$texte = 'des trucs <img class="class" src="../image.jpg" /> des machins';
$texte = 'des trucs <img id="id" src="/repertoire/image.jpg" class="class" /> des machins';
$masque = '#<img (?:.*?)src=(?:"|\')(.+)(?:"|\')(?:.*?) />#Uis';
preg_match_all($masque, $texte, $resultats);
echo '<pre>',print_r($resultats),'</pre>';
1. La solution donnée par stealth35 - utiliser le DOM - est efficace et ne devrait pas te prendre trop de temps.
En plus, la logique est simple à comprendre :
- Tu ouvres un fichier (x)HTML (avec [url=http://fr.php.net/manual/en/domdocument.loadhtmlfile.php]loadHTMLFile()[/url]
- Tu récupères les éléments [b]img[/b] (avec [url=http://fr.php.net/manual/en/domdocument.getelementsbytagname.php]getElementsByTagName()[/url])
- Pour chaque élément récupéré, tu récupères l'attribut [b]src[/b] (avec [url=http://fr.php.net/manual/en/domelement.getattribute.php]getAttribute()[/url])
Tu dis que ce n'est pas ton métier. Si j'étais méchant, je te dirais de demander à quelqu'un dont c'est le métier - et de le payer :twisted:
Mais tu as de la chance, je suis de bonne humeur...
[quote="marih"]- Si je bidouille, celui-ci est meilleur même si je ne comprends pas tout ![/quote]
C'est pour ça que ça ne fonctionne pas !
Les expressions régulières, c'est quelque chose de carré. Si tu ne comprends pas ce que tu demandes, il y a peu de chances que ça fonctionne correctement #-o
Exemple du premier pattern : [b]<img(.*)src="(.*)" (.*)>[/b]
Tu cherches ce qui commences par [b]<img[/b], puis 0 ou plusieurs caractères quelconques (qu'il stockera dans un premier élément), puis [b]src="[/b], puis 0 ou plusieurs caractères quelconques (qu'il stockera dans un deuxième élément), puis [b]" [/b](guillemet + espace), puis 0 ou plusieurs caractères quelconques (qu'il stockera dans un troisième élément), puis [b]>[/b].
=> pour [b]<img src="Tarata.jpg" width="181" height="361">[/b], il va prendre :
[b]<img[/b], puis " " (un espace, stocké dans le premier élément), puis [b]src="[/b], puis [b]Tarata.jpg" width="181[/b] (stocké dans le deuxième élément), puis [b]" [/b](guillemet + espace), puis [b]height="361"[/b] (stocké dans le troisième élément), puis [b]>[/b].
[quote="macgawel"]Et sinon, je persiste : apprends à chercher !
Une recherche sur google avec les mots clés "php récupérer image balise html" te donne la réponse[/quote]
Puisque tu n'as toujours pas appris à chercher, [url=http://www.developpez.net/forums/d682597/php/langage/regex/recuperer-lien-image-balise-img-src/]Solution trouvée en première page de Google :[/url]
[php]$texte = 'des trucs <img src="image.jpg" /> des machins';
$texte = "des trucs <img src='/image.jpg' /> des machins";
$texte = 'des trucs <img class="class" src="../image.jpg" /> des machins';
$texte = 'des trucs <img id="id" src="/repertoire/image.jpg" class="class" /> des machins';
$masque = '#<img (?:.*?)src=(?:"|\')(.+)(?:"|\')(?:.*?) />#Uis';
preg_match_all($masque, $texte, $resultats);
echo '<pre>',print_r($resultats),'</pre>';[/php]