{"id":231177,"date":"2022-12-29T16:10:00","date_gmt":"2022-12-29T13:10:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231177"},"modified":"2022-12-29T16:11:39","modified_gmt":"2022-12-29T13:11:39","slug":"hur-man-tar-bort-bilder-med-domdocument","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/hur-man-tar-bort-bilder-med-domdocument\/","title":{"rendered":"Hur man tar bort bilder med DOMDocument"},"content":{"rendered":"<p>Jag har skrivit om DOMDocument i n\u00e5gra andra inl\u00e4gg (<a href=\"https:\/\/wordpress.mediadoma.com\/sv\/hur-man-manipulerar-dom-med-php\/\" title=\"1\">1<\/a>, <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/aendra-bildbehaallare-paa-serversidan-i-wordpress\/\" title=\"2\">2<\/a>, <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/laegga-till-anpassade-wordpress-bildattribut\/\" title=\"3\">3<\/a> f\u00f6r att dela n\u00e5gra) men jag forts\u00e4tter att finna det anv\u00e4ndbart p\u00e5 olika s\u00e4tt.<\/p>\n<p>Kom ih\u00e5g att DOMDocument \u00e4r en klass i PHP som l\u00e5ter oss manipulera HTML-dokumentet innan vi renderar det i webbl\u00e4saren.<\/p>\n<p><a href=\"https:\/\/www.php.net\/manual\/en\/class.domdocument.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Fr\u00e5n manualen<\/a> :<\/p>\n<blockquote>\n<p>Representerar ett helt HTML- eller XML-dokument; fungerar som roten till dokumenttr\u00e4det.<\/p>\n<\/blockquote>\n<p>N\u00e4r jag t\u00e4nker p\u00e5 att arbeta med <code>saveHTML<\/code>funktionen t\u00e4nker jag p\u00e5 att beh\u00f6va serialisera den nya informationen till en fil eller annan utdatastr\u00f6m innan jag skickar den till webbl\u00e4saren.<\/p>\n<p>Men det beh\u00f6ver vi inte g\u00f6ra. Det kan g\u00f6ras i minnet.<\/p>\n<p>Exempel: I ett projekt m\u00e5ste jag hitta alla bildelement i ett dokument. Om bilden inte har en giltig k\u00e4ll-URL m\u00e5ste jag antingen ers\u00e4tta k\u00e4llattributet eller ta bort det.<\/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=\"Hur man tar bort bilder med DOMDocument\"><\/a><\/p>\n<p>F\u00f6r detta exempel, anta f\u00f6ljande<\/p>\n<ul>\n<li><code>isValidImage<\/code>\u00e4r en funktion som \u00e4r ansvarig f\u00f6r att kontrollera om det angivna k\u00e4llattributet l\u00f6ser sig till en giltig URL,<\/li>\n<li>Att jag st\u00e4ller in <code>src<\/code>attributet till en tom str\u00e4ng ist\u00e4llet f\u00f6r en platsh\u00e5llarbild f\u00f6r att h\u00e5lla koden enkel,<\/li>\n<li>Och jag \u00e5terst\u00e4ller resultatet till vad som \u00e4n kommer att \u00e5terges i mallen eller den partiella.<\/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\">Jag har kommenterat koden<\/a> s\u00e5 att den borde vara l\u00e4tt nog att f\u00f6lja f\u00f6r detta exempel:<\/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>Observera att det finns flera s\u00e4tt att f\u00f6rb\u00e4ttra koden ovan (som att returnera tidigt om inga bilder hittas), men syftet \u00e4r att visa hur man ers\u00e4tter <code>src<\/code>attributet om URL:en inte l\u00f6ser sig korrekt. Allts\u00e5 tar bort bilder med DOMDocument.<\/p>\n<p>Om du \u00e4r intresserad av hur du avg\u00f6r om en webbadress \u00e4r giltig kan <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/anvaenda-curl-foer-att-avgoera-om-den-angivna-webbadressen-aer-en-giltig-sida\/\" title=\"den h\u00e4r artikeln\">den h\u00e4r artikeln<\/a> vara till hj\u00e4lp.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Syftet \u00e4r att visa hur man ers\u00e4tter attributet src om URL:en inte l\u00f6ser sig korrekt. S\u00e5ledes, hur man tar bort bilder med 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":[838,848,901,755,807,724,868],"tags":[1173],"class_list":["post-231177","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-foer-nyboerjare","category-handledningar","category-koda","category-oeppen-kaella","category-php-9","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=231177"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231177\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/236999"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=231177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=231177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=231177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}