2015-07-19 62 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