{"id":231131,"date":"2022-12-29T16:13:00","date_gmt":"2022-12-29T13:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231131"},"modified":"2022-12-29T16:16:42","modified_gmt":"2022-12-29T13:16:42","slug":"jak-usunac-obrazy-za-pomoca-domdocument","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-usunac-obrazy-za-pomoca-domdocument\/","title":{"rendered":"Jak usun\u0105\u0107 obrazy za pomoc\u0105 DOMDocument"},"content":{"rendered":"<p>Pisa\u0142em o DOMDocument w kilku innych postach (<a href=\"https:\/\/wordpress.mediadoma.com\/pl\/jak-manipulowac-dom-za-pomoca-php\/\" title=\"1\">1<\/a>, <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/modyfikuj-kontenery-obrazow-po-stronie-serwera-w-wordpress\/\" title=\"2\">2<\/a>, <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/dodawanie-niestandardowych-atrybutow-obrazu-wordpress\/\" title=\"3\">3<\/a>, aby podzieli\u0107 si\u0119 kilkoma), ale nadal uwa\u017cam go za przydatny na r\u00f3\u017cne sposoby.<\/p>\n<p>Pami\u0119taj, DOMDocument to klasa w PHP, kt\u00f3ra pozwala nam manipulowa\u0107 dokumentem HTML przed wyrenderowaniem go w przegl\u0105darce.<\/p>\n<p><a href=\"https:\/\/www.php.net\/manual\/en\/class.domdocument.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Z instrukcji<\/a> :<\/p>\n<blockquote>\n<p>Reprezentuje ca\u0142y dokument HTML lub XML; s\u0142u\u017cy jako korze\u0144 drzewa dokumentu.<\/p>\n<\/blockquote>\n<p>Ilekro\u0107 my\u015bl\u0119 o pracy z <code>saveHTML<\/code>funkcj\u0105, my\u015bl\u0119 o potrzebie serializacji nowych informacji do pliku lub innego strumienia wyj\u015bciowego przed wys\u0142aniem go do przegl\u0105darki.<\/p>\n<p>Ale nie musimy tego robi\u0107. Mo\u017cna to zrobi\u0107 w pami\u0119ci.<\/p>\n<p>Przyk\u0142ad: w projekcie musz\u0119 znale\u017a\u0107 wszystkie elementy obrazu w dokumencie. Je\u015bli obraz nie ma prawid\u0142owego \u017ar\u00f3d\u0142owego adresu URL, musz\u0119 albo zast\u0105pi\u0107 atrybut \u017ar\u00f3d\u0142a, albo go usun\u0105\u0107.<\/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=\"Jak usun\u0105\u0107 obrazy za pomoc\u0105 DOMDocument\"><\/a><\/p>\n<p>Na potrzeby tego przyk\u0142adu za\u0142\u00f3\u017cmy, \u017ce:<\/p>\n<ul>\n<li><code>isValidImage<\/code>jest funkcj\u0105, kt\u00f3ra jest odpowiedzialna za sprawdzenie, czy okre\u015blony atrybut \u017ar\u00f3d\u0142owy jest t\u0142umaczony na poprawny adres URL,<\/li>\n<li>\u017be ustawiam <code>src<\/code>atrybut na pusty ci\u0105g, a nie obraz zast\u0119pczy, aby zachowa\u0107 prosty kod,<\/li>\n<li>I zwracam wynik do tego, co zostanie wyrenderowane w szablonie lub cz\u0119\u015bci.<\/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\">Skomentowa\u0142em kod<\/a>, wi\u0119c powinien by\u0107 do\u015b\u0107 \u0142atwy do na\u015bladowania dla tego przyk\u0142adu:<\/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>Zwr\u00f3\u0107 uwag\u0119, \u017ce powy\u017cszy kod mo\u017cna ulepszy\u0107 na kilka sposob\u00f3w (np. wczesny powr\u00f3t, je\u015bli nie zostan\u0105 znalezione \u017cadne obrazy), ale celem jest pokazanie, jak zast\u0105pi\u0107 <code>src<\/code>atrybut, je\u015bli adres URL nie zostanie poprawnie rozwi\u0105zany. W ten spos\u00f3b usuwam obrazy za pomoc\u0105 DOMDocument.<\/p>\n<p>Je\u015bli interesuje Ci\u0119, jak ustali\u0107, czy adres URL jest prawid\u0142owy, <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/uzywanie-curl-do-okreslenia-czy-okreslony-adres-url-jest-prawidlowa-strona\/\" title=\"ten artyku\u0142\">ten artyku\u0142<\/a> mo\u017ce by\u0107 pomocny.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Celem jest pokazanie, jak zast\u0105pi\u0107 atrybut src, je\u015bli adres URL nie zostanie poprawnie rozwi\u0105zany. Tak wi\u0119c, jak usun\u0105\u0107 obrazy za pomoc\u0105 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":[721,897,752,805,836,845,866],"tags":[1169],"class_list":["post-231131","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-otwarte-zrodlo","category-php-7","category-przewodnik-dla-poczatkujacych","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/231131","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=231131"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/231131\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/236999"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=231131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=231131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=231131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}