У меня есть ссылки на страницы:
import.html
<h1>Title</h1> <img src="img/pic1.jpg" alt="" title="Picture 1" class="pic"> <img src="img/pic2.jpg" alt="" title="Picture 2" class="pic"> <img src="img/pic3.jpg" alt="" title="Picture 3" class="pic"> <p>random text</p> <img src="img/pic4.jpg" alt="" title="Picture 4" class="pic">
index.php
<?php //get file content $html = file_get_contents('import.html'); function replace_img_src($img_tag) { $doc = new DOMDocument(); $doc->loadHTML($img_tag); $tags = $doc->getElementsByTagName('img'); if (count($tags) > 0) { $tag = $tags->item(0); $old_src = $tag->getAttribute('src'); $new_src_url = 'website.com/assets/'.$old_src; $tag->setAttribute('src', $new_src_url); return $doc->saveHTML($tag); } return false; } // usage $new = replace_img_src($html); print_r(htmlspecialchars($new));
Цель:
Я хочу заменить все атрибуты src
элемента img
в файле import.html и вернуть файл с новыми ссылками на изображения. Мне удалось создать замену одного элемента.
Как отредактировать это, чтобы просмотреть весь файл и заменить все атрибуты и вернуть новый import.html с замененными src
?
Метод getElementsByTagName()
возвращает объект DOMNodeList
содержащий все согласованные элементы. В настоящее время вы просто изменяете только один тег img
. Чтобы заменить все теги img
, просто пропустите их через foreach
:
function replace_img_src($img_tag) { $doc = new DOMDocument(); $doc->loadHTML($img_tag); $tags = $doc->getElementsByTagName('img'); foreach ($tags as $tag) { $old_src = $tag->getAttribute('src'); $new_src_url = 'website.com/assets/'.$old_src; $tag->setAttribute('src', $new_src_url); } return $doc->saveHTML(); }
Вы можете просто просмотреть все теги и заменить их. Не испытано!
$tags = $doc->getElementsByTagName('img'); foreach ($tags as $tag) { $old_src = $tag->getAttribute('src'); $new_src_url = 'website.com/assets/'.$old_src; $tag->setAttribute('src', $new_src_url); $doc->saveHTML($tag); }
foreach ($tags as $tag) { $old_src = $tag->getAttribute('src'); $new_src_url = 'website.com/assets/'.$old_src; $tag->setAttribute('src', $new_src_url); }
Используйте foreach для прокрутки всех элементов.
function replace_img_src($img_tag) { $doc = new DOMDocument(); $doc->loadHTML($img_tag); $tags = $doc->getElementsByTagName('img'); foreach($tags as $tag){ $old_src = $tag->getAttribute('src'); $new_src_url = 'website.com/assets/'.$old_src; $tag->setAttribute('src', $new_src_url); } return $doc->saveHTML(); }