2013-10-20 34 views
2

我想知道通過DOMDocument創建html元素是否是「不好的做法」。下面是在建立在我的<head> meta標籤的功能:使用DOMDocument在HTML文件中創建元素?

$head = new DOMDocument(); 

foreach($meta as $meta_item) { 
    $meta_element = $head->createElement('meta'); 
    foreach($meta_item as $k=>$v) { 
     $attr = $head->createAttribute($k); 
     $attr->value = $v; 
     $meta_element->appendChild($attr); 
    } 
    echo($head->saveXML($meta_element)); 
} 

與:

foreach($meta as $meta_item) { 
    $attr = ''; 
    foreach($meta_item as $k=>$v) { 
     $attr .= ' ' . $k . '="' . $v . '"'; 
    } 
    ?><meta <?php echo $attr; ?>><?php 
} 

在成本方面,這種測試時,它似乎是微不足道的。我的問題:我是否應該養成這樣做的習慣?這是一個壞主意嗎?

+3

它在技術上做事情的「正確」的方式。但使用DOM操作構建「minor」html文檔是非常痛苦的。大多數人將html構建爲一個字符串,然後使用'.innerHTML'類型的東西將整個字符串填充到dom中。如果您只添加了一些DOM元素,那麼請繼續使用DOM。如果你正在構建很多元素,然後建立一個字符串,並一次性把它們全部推到dom中。 –

+0

@MarcB謝謝Marc!有時我只需要一位專家告訴我什麼是正確的做事方式!我應該刪除這個問題嗎? –

+2

如果他們是格式良好的問題,沒有理由刪除基本知識問題。知識水平是永遠不會刪除問題的理由。 – ajp15243

回答

6

使用DOM方法創建HTML元素可以是一個好主意,因爲這將(在大多數情況下)處理的對你特殊字符轉義。

給出可以通過使用setAttribute略微簡化的例子:

<?php 

$doc = new DOMDocument; 
$html = $doc->appendChild($doc->createElement('html')); 
$head = $html->appendChild($doc->createElement('head')); 

$meta = array(
    array('charset' => 'utf-8'), 
    array('name' => 'dc.creator', 'content' => 'Foo Bar'), 
); 

foreach ($meta as $attributes) { 
    $node = $head->appendChild($doc->createElement('meta')); 
    foreach ($attributes as $key => $value) { 
     $node->setAttribute($key, $value); 
    } 
} 

$doc->formatOutput = true; 
print $doc->saveHTML(); 

// <html><head> 
// <meta charset="utf-8"> 
// <meta name="dc.creator" content="Foo Bar"> 
// </head></html> 
+0

感謝您回答Alf:D –