需要有关使用PHP DOMDocument附加HTML图像的帮助

时间:2015-07-19 12:17:01

标签: php domdocument

我正在尝试使用PHP DOMDocument在<img src="" alt="" >内附加<body></body>

以下是代码:

$testcode ='<!DOCTYPE html><html><head><title></title></head><body></body></html>';
$dom = new DOMDocument;

$dom->loadHTML($testcode);


$img_tag = $dom->createDocumentFragment();
$img_tag->appendXML('<img src="http://www.somesite.com/" alt="" >');
$body = $dom->getElementsByTagName('body');
foreach($body as $node) {
    $node->appendChild($img_tag);
}
echo $dom->saveHTML();

我收到了这个错误:

Message: DOMNode::appendChild(): Document Fragment is empty

但经过几次实验后,我发现它正在期待关闭标签。所以这段代码运行良好:

<img src="http://www.somesite.com/" alt="" ></img>

最后附加的标签看起来很好。它会自动删除结束标记。

<img src="http://www.somesite.com/" alt="" >

问题:为什么我们必须为此使用结束标记?它不是那么明显。

另一个问题: 添加URL参数会触发上述相同的错误。

<img src="http://www.somesite.com/?v=1&param=4" alt="" >

经过几次试验后,当URL被编码时,其工作正常。再一次不那么明显了。

问题:如何在不执行上述操作的情况下以简单的方式附加图像标记。

其实我正在编写一个邮件应用程序,我只想在最后插入谷歌分析电子邮件开放跟踪代码。类似的东西:

<img src="http://www.google-analytics.com/collect?v=1&t=event" alt="" >

编码网址的问题在于它没有跟踪任何内容。

提前致谢!

1 个答案:

答案 0 :(得分:1)

要解决两件事:

  1. 您呼叫的功能是appendXML。根据定义,它需要XML,它与HTML略有不同。在XML中,必须关闭所有代码,因此需要</img>才能关闭<img><img src="http://www.somesite.com/" alt="" />也应该有效(自闭标签)。

  2. 使用未编码的&符号(&)在HTML文档中是非法的。它应该是&amp;。要将URL转换为正确的编码,请尝试以下操作:

    '<img src="' . htmlentities("http://www.somesite.com/?v=1&param=4") . " alt="" ></img>'

  3. 那将成为'<img src="http://www.somesite.com/?v=1&amp;param=4" alt=""></img>'