{"id":231778,"date":"2022-12-29T16:51:00","date_gmt":"2022-12-29T13:51:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231778"},"modified":"2022-12-29T16:51:39","modified_gmt":"2022-12-29T13:51:39","slug":"kuvien-poistaminen-domdocumentilla","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/kuvien-poistaminen-domdocumentilla\/","title":{"rendered":"Kuvien poistaminen DOMDocumentilla"},"content":{"rendered":"<p>Olen kirjoittanut DOMDocumentista muutamissa muissa viesteiss\u00e4 (<a href=\"https:\/\/wordpress.mediadoma.com\/fi\/kuinka-kaesitellae-dom-ta-php-n-avulla\/\" title=\"1\">1<\/a>, <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/muokkaa-kuvasaeilioeitae-palvelinpuolella-wordpressissae\/\" title=\"2\">2<\/a>, <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/mukautettujen-wordpress-kuvamaeaeritteiden-lisaeaeminen\/\" title=\"3\">3<\/a> jakaaksesi muutaman), mutta pid\u00e4n sit\u00e4 edelleen hy\u00f6dyllisen\u00e4 eri tavoin.<\/p>\n<p>Muista, ett\u00e4 DOMDocument on PHP:n luokka, jonka avulla voimme k\u00e4sitell\u00e4 HTML-asiakirjaa ennen sen render\u00f6imist\u00e4 selaimessa.<\/p>\n<p><a href=\"https:\/\/www.php.net\/manual\/en\/class.domdocument.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">K\u00e4sikirjasta<\/a> :<\/p>\n<blockquote>\n<p>Edustaa koko HTML- tai XML-asiakirjaa; toimii dokumenttipuun juurena.<\/p>\n<\/blockquote>\n<p>Aina kun ajattelen ty\u00f6skentelev\u00e4ni <code>saveHTML<\/code>toiminnon kanssa, ajattelen, ett\u00e4 uudet tiedot on sarjoitava tiedostoon tai muuhun tulostevirtaan ennen sen l\u00e4hett\u00e4mist\u00e4 selaimeen.<\/p>\n<p>Mutta meid\u00e4n ei tarvitse tehd\u00e4 sit\u00e4. Se voidaan tehd\u00e4 muistissa.<\/p>\n<p>Esimerkki: Projektissa minun on l\u00f6ydett\u00e4v\u00e4 kaikki asiakirjan kuvaelementit. Jos kuvalla ei ole kelvollista l\u00e4hde-URL-osoitetta, minun on joko korvattava l\u00e4hdeattribuutti tai poistettava se.<\/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=\"Kuvien poistaminen DOMDocumentilla\"><\/a><\/p>\n<p>T\u00e4ss\u00e4 esimerkiss\u00e4 oletetaan seuraavaa<\/p>\n<ul>\n<li><code>isValidImage<\/code>on funktio, jonka teht\u00e4v\u00e4n\u00e4 on tarkistaa, onko m\u00e4\u00e4ritetty l\u00e4hdeattribuutti kelvollinen URL-osoite,<\/li>\n<li>ett\u00e4 asetan <code>src<\/code>attribuutin tyhj\u00e4ksi merkkijonoksi paikkamerkkikuvan sijaan, jotta koodi pysyy yksinkertaisena,<\/li>\n<li>Ja palautan tuloksen mihin tahansa malliin tai osittaiseen malliin.<\/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\">Olen kommentoinut koodia,<\/a> joten sen pit\u00e4isi olla tarpeeksi helppo seurata t\u00e4ss\u00e4 esimerkiss\u00e4:<\/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>Huomaa, ett\u00e4 yll\u00e4 olevaa koodia voidaan parantaa useilla tavoilla (kuten palauttaminen aikaisin, jos kuvia ei l\u00f6ydy), mutta tarkoituksena on n\u00e4ytt\u00e4\u00e4, kuinka <code>src<\/code>attribuutti korvataan, jos URL-osoite ei ratkaise oikein. Siten kuvien poistaminen DOMDocumentilla.<\/p>\n<p>Jos olet kiinnostunut URL-osoitteen kelvollisuuden m\u00e4\u00e4ritt\u00e4misest\u00e4, <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/curl-osoitteen-kaeyttaeminen-sen-maeaerittaemiseen-onko-maeaeritetty-url-osoite-kelvollinen-sivu\/\" title=\"t\u00e4st\u00e4 artikkelista\">t\u00e4st\u00e4 artikkelista<\/a> voi olla apua.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tarkoituksena on n\u00e4ytt\u00e4\u00e4, kuinka src-attribuutti korvataan, jos URL-osoite ei ratkaise oikein. N\u00e4in ollen, kuinka poistaa kuvia DOMDocumentilla.<\/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":[750,719,895,834,843,803,864],"tags":[1166],"class_list":["post-231778","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-avoin-laehdekoodi","category-kehittaejae","category-koodi","category-opas-aloittelijoille","category-opetusohjelmia","category-php-5","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231778","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=231778"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231778\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/236999"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231778"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231778"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231778"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}