2015-04-01 78 views
0

我有一個數據庫上正確的幾個職位,看起來像這些:如何報價添加到img標籤的src屬性

<a href="somelink.html"><img src=someimage.jpg border=1 alt="some text"></a> 

所以我需要:

  • 刪除邊框= 1個屬性(str_replace函數將做的工作)
  • 在開始和src屬性的末尾添加引號:SRC =「someimage.jpg」
  • 關閉img標籤與添加/>在所述標籤的端部

有一兩件事我想是解析DOM並獲得SRC來源:

$doc = new DOMDocument(); 
    $body = $this->removeUnnecessaryTags($body); 
    $doc->loadHTML($this->removeUnnecessaryTags($body)); 
    $imageTags = $doc->getElementsByTagName('img'); 

    foreach($imageTags as $tag) { 
     $result[] = [ 'src' => $tag->getAttribute('src'), 'alt' => $tag->getAttribute('alt') ]; 
    } 

我知道這可以用正則表達式來完成,但我正則表達式知識不是非常好。有任何想法嗎?

感謝

+1

你嘗試過這麼遠嗎?不太可能有人會爲你完成整個工作。 – D4V1D 2015-04-01 15:07:08

+0

對:)我更新了這個問題,基本上我解析了dom文件 – petekaner 2015-04-01 15:11:14

+0

現在等待,你有一個數據庫中的HTML?爲什麼?你想在客戶端使用它時修復它,而不是修復它在數據庫中? – Alex 2015-04-01 15:53:50

回答

2

所有你需要的是使用DOM文檔的功能和libxml的選擇:

$html = '<a href="somelink.html"><img src=someimage.jpg border=1 alt="some text"></a>'; 

libxml_use_internal_errors(true); 
$dom = new DOMDocument; 
$dom->loadHTML($html, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED); 

$result = $dom->saveXML($dom->documentElement); 

echo $result; 

LIBXML_HTML_NODEFDTD防止自動添加時缺少DTD一個DTD。 LIBXML_HTML_NOIMPLIED可防止在缺失時添加html和body標籤。

saveXML方法將使用符合XML的語法保存文檔,以解決自閉標籤問題。 (*)

無論您使用哪種方法(saveXML或saveHTML),都會使用雙引號來自動封裝屬性。

(*)這將消除最終DTD,所以,如果你想保留它,你可以使用此解決辦法刪除XML聲明:

$result = $dom->saveXML(); 
$result = substr($result, strpos($result, "\n") + 1); 
+0

謝謝!這工作很好 – petekaner 2015-04-01 16:03:29