Я хочу перебирать изображения в HTML-документе и устанавливать ширину / высоту, если они не существуют.
Вот минимальный рабочий код:
$content = '<img src="example.gif" />'; $dom = new Zend_Dom_Query($content); $imgs = $dom->query('img'); foreach ($imgs as $img) { $width = (int) $img->getAttribute('width'); $height = (int) $img->getAttribute('height'); if ((0 == $width) && (0 == $height)) { $img->setAttribute('width', 100)); $img->setAttribute('height', 100); } } $content = $dom->getDocument();
setAttribute()
устанавливают значения, и я проверял это, повторяя значения. Проблема в том, что DOMElement
не возвращается к объекту Zend_Dom_Query
. В конце переменная $content
не изменяется.
РЕШЕНИЕ : cbuckley получает кредит, но вот мой последний рабочий код:
$doc = new DOMDocument(); $doc->loadHTML($content); foreach ($doc->getElementsByTagName('img') as $img) { if ((list($width, $height) = getimagesize($img->getAttribute('src'))) && (0 === (int) $img->getAttribute('width')) && (0 === (int) $img->getAttribute('height'))) { $img->setAttribute('width', $width); $img->setAttribute('height', $height); } } $content = $doc->saveHTML();
Выполнение этого с помощью Zend_Dom_Query
:
$dom = new Zend_Dom_Query($content); $imgs = $dom->query('img'); foreach ($imgs as $img) { if ((list($width, $height) = getimagesize($img->getAttribute('src'))) && (0 === (int) $img->getAttribute('width')) && (0 === (int) $img->getAttribute('height'))) { $img->setAttribute('width', $width); $img->setAttribute('height', $height); } } $content = $imgs->getDocument()->saveHTML();
Объект Zend_Dom_Query содержит вашу строку содержимого как «документ». Документ, который вы ищете, находится в другом объекте; он возвращается в объекте Zend_Dom_Query_Result $imgs
, поэтому $imgs
этого используйте $imgs->getDocument()
.
Вы также можете сделать это с помощью прямого манипулирования DOM:
$doc = new DOMDocument(); $doc->loadXml($content); foreach ($doc->getElementsByTagName('img') as $img) { $width = (int) $img->getAttribute('width'); $height = (int) $img->getAttribute('height'); if (0 === $width && 0 === $height) { $img->setAttribute('width', '100'); $img->setAttribute('height', '100'); } } $content = $doc->saveXML();