首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DOM文档字符错误

DOM文档字符错误
EN

Stack Overflow用户
提问于 2015-05-18 08:11:32
回答 2查看 107关注 0票数 2

未声明HTML文档的字符编码。如果文档包含来自US范围以外的字符,则文档将在某些浏览器配置中使用乱码文本呈现。页的字符编码必须在文档或传输协议中声明。

dom创建上面的错误,当我在元和数据节点中创建新元素时,页面返回为空白,如下所示:

代码语言:javascript
复制
<?php
$this->module->daftarkanJs('underscore-min.js');
$form = CJSON::decode(file_get_contents(Yii::app()->getBaseUrl(true).'/index.php/odk/api/index/id/'.$_GET['id']));
$input = CJSON::decode(file_get_contents(Yii::app()->getBaseUrl(true).'/index.php/odk/api/input/id/'.$_GET['id']));

function haveChild($id, $input_id){
    $child = CJSON::decode(file_get_contents(Yii::app()->getBaseUrl(true).'/index.php/odk/api/child/id/'.$id.'/parentId/'.$input_id));
    if($child['result']){ // jika child ada
        foreach($child['result'] as $data){
            // echo '-  <b>'.$data['input_id'].'</b><br/>';
            haveChild($id, $data['input_id']);
        }
        return true;
    }else{
        return false;
    }
}

function loop($inputResult, $id){
    $dom = new DOMDocument('1.0', 'utf-8');
    $dom->preserveWhiteSpace = false;
    $dom->formatOutput = true;

    $html = $dom->createElementNS('http://www.w3.org/2002/xforms', 'h:html');
    $html->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:h', 'http://www.w3.org/1999/xhtml');
    $html->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:ev', 'http://www.w3.org/2001/xml-events');
    $html->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:xsd', 'http://www.w3.org/2001/XMLSchema');
    $html->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:jr', 'http://openrosa.org/javarosa');
    $html = $dom->appendChild($html);

    $head = $dom->createElement('h:h');
    $head = $html->appendChild($head);

        $title = $dom->createElement('h:t', 'xxxxxxx');
        $title = $head->appendChild($title);

        $model = $dom->createElement('m');
        $model = $head->appendChild($model);

            $instance = $dom->createElement('instance');
            $instance = $model->appendChild($instance);

                $data = $dom->createElement('data');
                $data = $instance->appendChild($data);

                    $meta = $dom->createElement('meta');
                    $meta = $data->appendChild($meta);

                        $instanceID = $dom->createElement('instaceID');
                        $instanceID = $meta->appendChild($instanceID);

            $bind = $dom->createElement('bind');
            $bind->setAttribute("nodeset","/data/meta/instanceID");
            $bind = $model->appendChild($bind);

    foreach($inputResult as $data){
        if(!$data['parent_id']){ // ambil yang bukan child
            $check = haveChild($id, $data['input_id']);

            if(!$check){
                $data = $dom->createElement('data');
                $data = $instance->appendChild($data);
                
                $meta = $dom->createElement('meta');
                $meta = $data->appendChild($meta);

                $bind = $dom->createElement('bind');
                $bind->setAttribute("nodeset","/data/".str_replace(" ", "_", $data['name']));
                $bind = $model->appendChild($bind);
            }
        }
    }

    $body = $dom->createElement('h:b');
    $body = $html->appendChild($body);
    printf ("<pre>%s</pre>", htmlentities ($dom->saveXML()));
}
loop($input['result'], $_GET['id']);
?>

EN

回答 2

Stack Overflow用户

发布于 2015-05-18 08:12:37

这一行中的错误:

$data = $dom->createElement('data');$data = $instance->appendChild($data);

$meta = $dom->createElement('meta');$meta =$data->附录儿童($meta);

票数 0
EN

Stack Overflow用户

发布于 2015-05-18 09:22:27

您不输出XML,而是使用转义XML的HTML。

代码语言:javascript
复制
<pre>some escaped xml</pre>

如果将此输出视为XML,则此输出与错误消息匹配。这里没有使用编码的XML声明。

去掉DOM方法后,源输出一个XML文档:https://eval.in/private/1507ef8a4065d0

但是,我建议对所有命名空间节点使用createElementNS()。像$dom->createElement('h:h');这样的调用是不明确的。

代码语言:javascript
复制
$xmlns = [ 'h' => 'http://www.w3.org/1999/xhtml' ];

$dom = new DOMDocument();
$html = $dom->appendChild(
  $dom->createElementNS($xmlns['h'], 'h:html')
);
$head = $html->appendChild($dom->createElementNS($xmlns['h'], 'h:head'));

echo $dom->saveXml();

输出:

代码语言:javascript
复制
<?xml version="1.0"?>
<h:html xmlns:h="http://www.w3.org/1999/xhtml"><h:head/></h:html>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30298082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档