【问题标题】:codeigniter, view template string to DomDocument operatingcodeigniter,查看模板字符串到 DomDocument 操作
【发布时间】:2017-11-23 18:47:39
【问题描述】:

我在 application\views\article.php 中有一个 php 文件

article.php 内容:

<!DOCTYPE html>
<html prefix='og: http://ogp.me/ns#'>
<head>
    <title>test</title>
</head>
<body>
<div> test div1 </div>
<div> test div2 </div>
</body>
</html>

当我使用 $this->load->view() 加载 article.php 模板并使用 DomDocument 获取 dom 时。

$html=$this->load->view('article','',TRUE);
$doc = new DomDocument;
$doc->loadHTML($html);      
echo $doc->saveXML($doc->getElementsByTagName('div')->item(0));
// or echo $doc->saveXML();

有错误信息: 消息:DOMDocument::loadHTML(): Unexpected end tag : meta in Entity, line: 4

但是当我使用这个时:

$html='<!DOCTYPE html>
    <html prefix=\'og: http://ogp.me/ns#\'>
    <head>
        <title>test</title>
    </head>
    <body>
    <div>   test div1 </div>
    <div> test div2 </div>
    <p>Directory </p>
    </body>
    </html>';

  $doc->loadHTML($html);         
  echo $doc->saveXML($doc->getElementsByTagName('div')->item(0));
  // or echo $doc->saveXML();

这就是成功。

gettype($html) 到 $html 的两个方法,都是字符串。

【问题讨论】:

    标签: php codeigniter domdocument


    【解决方案1】:

    尝试隐藏警告

    libxml_use_internal_errors(true);
    

    或者:

    @$doc->loadHTML($html);
    

    警告是因为 $this-&gt;load-&gt;view('article','',TRUE); 返回的 HTML 无效,loadHTML() 解决了这个问题但显示警告。

    Manual

    【讨论】:

    • 为什么?这个 $this->load->view('article','',TRUE) 无效?
    • 也许是 unescape chars,试着用一个简单的var_dump($doc-&gt;loadHTML($html)); 看看这个 HTML 的字符串,你会看到什么?
    • 转义字符? var_dump($doc->loadHTML($html)) 显示更多错误消息:DOMDocument::loadHTML(): Unexpected end tag : meta in Entity, line: 4 .....line:9, 五条消息。 var_dump(@$doc->loadHTML($html)) 显示布尔值(true)
    • 对不起,var_dump($html) 是正确的代码,查看 CI 在函数 $this->load-> 中返回的原始字符串并验证 this 的结构。
    猜你喜欢
    • 1970-01-01
    • 2011-03-13
    • 2016-06-09
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多