0

在我的一段代码中,我试图使用 PHP DOM 查找所有 img 标签,直接在之后添加另一个 img 标签,然后将所有这些标签包装在一个 div 中,即

<!-- From this... -->
<img src="originalImage.jpg" />

<!-- ...to this... -->
<div class="wrappingDiv">
    <img src="originalImage.jpg" />
    <img src="newImage.jpg" />
</div>

这是我正在尝试的PHP

$dom = new domDocument;
$dom->loadHTML($the_content_string);
$dom->preserveWhiteSpace = false;
    //get all images and chuck them in an array
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
            //create the surrounding div
    $div = $image->ownerDocument->createElement('div');
    $image->setAttribute('class','main-image');
        $added_a = $image->parentNode->insertBefore($div,$image);
        $added_a->setAttribute('class','theme-one');
        $added_a->appendChild($image);
            //create the second image
    $secondary_image = $image->ownerDocument->createElement('img');
    $added_img = $image->appendChild($secondary_image);
    $added_img->setAttribute('src', $twine_img_url);
    $added_img->setAttribute('class', $twine_class);
    $added_img->appendChild($image);
    }

echo $dom->saveHTML();

直到我创建 $add_img 变量的所有内容都可以正常工作。好吧,至少它不会出错。是最后四行杀死了它。

我显然在做一些相对愚蠢的事情......那里有任何可爱,可爱的人能够指出我在哪里做的事情?

4

1 回答 1

1

第一的:

您正在尝试将图像附加到此处的图像(但当然在 HTML 中,图像不能有子图像,将图像附加到 div):

$added_img = $image->appendChild($secondary_image);

它一定要是

$added_img = $added_a->appendChild($secondary_image);

再次在这里:

$added_img->appendChild($image);

必须:

$added_a->appendChild($image);

但这根本行不通,因为 NodeList 是实时的。一旦你追加一个新图像,这个图像是 $images 的一部分,你将陷入无限循环。因此,首先使用初始图像填充一个数组,而不是使用 NodeList。

$imageList= $dom->getElementsByTagName('img');
$images=array();
for($i=0;$i<$imageList->length;++$i)
{
  $images[]=$imageList->item($i);
}
于 2012-07-12T13:51:40.307 回答