Запись изменений Вернуться к объекту запроса Zend Dom

Я хочу перебирать изображения в 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();