2015-07-19 53 views
-1

我想使用PHP DOMDocument在<body></body>内追加<img src="" alt="" >需要使用PHP DOMDocument添加HTML图像的帮助

下面是代码:

$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="" > 

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

在此先感谢!

回答

0

两件事情来解决:

  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>'

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

+0

“htmlentities”确实解决了这个问题。谢谢! – Laraveldeep