Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用DOMDocument在HTML文件中创建元素?_Php_Domdocument - Fatal编程技术网

Php 使用DOMDocument在HTML文件中创建元素?

Php 使用DOMDocument在HTML文件中创建元素?,php,domdocument,Php,Domdocument,我想知道通过DOMDocument创建html元素是否是一种“糟糕的做法”。下面是在my中构建元标记的函数: $head = new DOMDocument(); foreach($meta as $meta_item) { $meta_element = $head->createElement('meta'); foreach($meta_item as $k=>$v) { $attr = $head->createAttribute($k

我想知道通过DOMDocument创建html元素是否是一种“糟糕的做法”。下面是在my
中构建元标记的函数:

$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
}
foreach($meta作为$meta\u项){
$attr='';
foreach($k=>v的元项目){
$attr.=''.$k.''.'.$v.'''.';
}

使用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>

从技术上讲,这是一种“正确”的做事方式。但是,即使是“次要的”使用html文档但使用DOM操作是非常痛苦的。大多数人将html构建为字符串,然后使用
。innerHTML
-键入stuff将整个字符串填充到DOM中。如果您只添加了几个DOM元素,那么继续使用DOM。如果您构建了很多元素,那么构建一个字符串并立即将其全部推入DOM中。@MarcB谢谢Marc!有时候我只需要一位专家告诉我什么是做事情的正确方式!我应该删除这个问题吗?如果基本知识问题是格式良好的问题,就没有理由删除它们。知识水平不是删除问题的理由。3.5年后,我很高兴你没有删除这个答案。谢谢你回答Alf:D