В PHP, как я могу использовать класс DOMDocument для замены атрибута src= тега IMG? [закрытый]
Часто полезно иметь возможность заменить атрибут src= тега html IMG без потери каких-либо других атрибутов. Какой быстрый, нерегексный способ сделать это?
Причины, по которым я не хочу использовать регулярное выражение:
- это не очень читабельно. Я не хочу тратить 20 минут на расшифровку паттерна каждый раз, когда мне нужно отчитаться за новое дело.
- я планирую изменить эту функцию, чтобы добавить атрибуты width и height, когда они отсутствуют. Простое регулярное выражение замена строки не будет легко изменить для этой цели.
Вот контекст: у меня есть куча сообщений RSS-канала, каждый из которых содержит одно изображение. Я хотел бы заменить эти изображения пустыми изображениями, но сохранить HTML в противном случае без изменений:
$raw_post_html = "<h2>Feed Example</h2>
<p class='feedBody'>
<img src='http://premium.mofusecdn.com/6ff7098b3c8561d70c0af16d30e57d4e/cache/other/48da8425bc54af2d5d022f28cc8b021c.200.0.0.png' alt='Feed Post Image' width='350' height='200' />
Feed Body Content
</p>";
echo replace_img_src($raw_post_html, "http://cdn.company.org/blank.gif");
1 ответ:
Вот что я придумал. Он использует PHP DOM API для создания крошечного HTML-документа, а затем сохраняет XML только для элемента IMG.
function replace_img_src($original_img_tag, $new_src_url) { $doc = new DOMDocument(); $doc->loadHTML($original_img_tag); $tags = $doc->getElementsByTagName('img'); if(count($tags) > 0) { $tag = $tags->item(0); $tag->setAttribute('src', $new_src_url); return $doc->saveHTML($tag); } return false; }
Примечание : в версиях PHP до 5.3.6,
$doc->saveHTML($tag)
можно изменить на$doc->saveXML($tag)
.