{"id":231676,"date":"2022-12-29T16:33:00","date_gmt":"2022-12-29T13:33:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231676"},"modified":"2022-12-29T16:36:40","modified_gmt":"2022-12-29T13:36:40","slug":"comment-supprimer-des-images-avec-domdocument","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-supprimer-des-images-avec-domdocument\/","title":{"rendered":"Comment supprimer des images avec DOMDocument"},"content":{"rendered":"<p>J&rsquo;ai \u00e9crit sur DOMDocument dans quelques autres articles (<a href=\"https:\/\/wordpress.mediadoma.com\/fr\/comment-manipuler-le-dom-avec-php\/\" title=\"1\">1<\/a>, <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/modifier-les-conteneurs-dimages-cote-serveur-dans-wordpress\/\" title=\"2\">2<\/a>, <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/ajout-dattributs-dimage-wordpress-personnalises\/\" title=\"3\">3<\/a> pour en partager quelques-uns) mais je continue \u00e0 le trouver utile de diff\u00e9rentes mani\u00e8res.<\/p>\n<p>Rappelez-vous, DOMDocument est une classe en PHP qui nous permet de manipuler le document HTML avant de le rendre dans le navigateur.<\/p>\n<p><a href=\"https:\/\/www.php.net\/manual\/en\/class.domdocument.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Du manuel<\/a> :<\/p>\n<blockquote>\n<p>Repr\u00e9sente un document HTML ou XML entier\u00a0; sert de racine \u00e0 l&rsquo;arborescence du document.<\/p>\n<\/blockquote>\n<p>Chaque fois que je pense travailler avec la <code>saveHTML<\/code>fonction, je pense devoir s\u00e9rialiser les nouvelles informations dans un fichier ou un autre flux de sortie avant de les envoyer au navigateur.<\/p>\n<p>Mais nous n&rsquo;avons pas \u00e0 le faire. Cela peut \u00eatre fait en m\u00e9moire.<\/p>\n<p>Exemple: dans un projet, j&rsquo;ai besoin de trouver tous les \u00e9l\u00e9ments d&rsquo;image dans un document. Si l&rsquo;image n&rsquo;a pas d&rsquo;URL source valide, je dois soit remplacer l&rsquo;attribut source, soit le supprimer.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159632-61e6f91ebff9c.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159632-61e6f91ebff9c.png\" alt=\"Comment supprimer des images avec DOMDocument\"><\/a><\/p>\n<p>Pour les besoins de cet exemple, supposons ce qui suit<\/p>\n<ul>\n<li><code>isValidImage<\/code>est une fonction charg\u00e9e de v\u00e9rifier si l&rsquo;attribut source sp\u00e9cifi\u00e9 correspond \u00e0 une URL valide,<\/li>\n<li>Que je d\u00e9finisse l&rsquo; <code>src<\/code>attribut sur une cha\u00eene vide plut\u00f4t qu&rsquo;une image d&rsquo;espace r\u00e9serv\u00e9 pour garder le code simple,<\/li>\n<li>Et je renvoie le r\u00e9sultat \u00e0 tout ce qui sera rendu dans le mod\u00e8le ou le partiel.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/35581dce7a46c4a78f5168d0291aa961#file-00-replace-image-src-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">J&rsquo;ai comment\u00e9 le code<\/a>, il devrait donc \u00eatre assez facile \u00e0 suivre pour cet exemple:<\/p>\n<pre><code>&lt;?php\n\n\/\/ Instantiate a DOMDocument object and load the incoming $description HTML.\n$domDocument = new DOMDocument();\n$domContent = $domDocument-&gt;loadHTML(mb_convert_encoding($description, 'HTML-ENTITIES'));\n\n\/\/ Find all of the images in the HTML.\n$images = $domDocument-&gt;getElementsByTagName('img');\n\n\/\/ If there are images, then iterate through each of them.\nif (0 !== count($images)) {\n    $urlPrefix = $this-&gt;getUrlPrefix(); \/\/ A helper function for getting the URL prefix.\n    foreach ($images as $image) {\n        $image-&gt;setAttribute(\n            'src',\n            $urlPrefix.$image-&gt;getAttribute('src')\n        );\n\n        \/\/ If the image's source results in a 404 status code, set the `src` to an empty string.\n        if (!$this-&gt;isValidImage($image-&gt;getAttribute('src'))) {\n            $image-&gt;setAttribute('src', '');\n        }\n    }\n}\n\n\/\/ Save the changed document and send it to the front-end.\nreturn $domDocument-&gt;saveHTML();<\/code><\/pre>\n<p>Notez qu&rsquo;il existe plusieurs fa\u00e7ons d&rsquo;am\u00e9liorer le code ci-dessus (par exemple, revenir plus t\u00f4t si aucune image n&rsquo;est trouv\u00e9e), mais le but est de montrer comment remplacer l&rsquo; <code>src<\/code>attribut si l&rsquo;URL ne se r\u00e9sout pas correctement. Ainsi, supprimer des images avec DOMDocument.<\/p>\n<p>Si vous souhaitez savoir comment d\u00e9terminer si une URL est valide, <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/utilisation-de-curl-pour-determiner-si-lurl-specifiee-est-une-page-valide\/\" title=\"cet article\">cet article<\/a> peut vous \u00eatre utile.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le but est de montrer comment remplacer l&rsquo;attribut src si l&rsquo;URL ne se r\u00e9sout pas correctement. Ainsi, comment supprimer des images avec DOMDocument.<\/p>\n","protected":false},"author":1,"featured_media":236999,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,832,748,801,841,862],"tags":[1167],"class_list":["post-231676","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-open-source-projektmanagement-2","category-php-3","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=231676"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/236999"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}