2012-02-05 37 views
41

Tôi xây dựng một tập lệnh kết hợp tất cả css trên một trang với nhau để sử dụng nó trong các cm của tôi. Nó hoạt động tốt trong một thời gian dài bây giờ tôi tôi nhận được lỗi này:
DOMDocument :: loadHTML error


Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Tag header invalid in Entity, line: 10 in css.php on line 26

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Tag nav invalid in Entity, line: 10 in css.php on line 26

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Tag section invalid in Entity, line: 22 in css.php on line 26

This is the php script

Đây là mã của tôi:

<?php 
header('Content-type: text/css'); 
include ('../global.php'); 

if ($usetpl == '1') { 
    $client = New client(); 
    $tplname = $client->template(); 
    $location = "../templates/$tplname/header.php"; 
    $page = file_get_contents($location); 
} else { 
    $page = file_get_contents('../index.php'); 
} 

class StyleSheets extends DOMDocument implements IteratorAggregate 
{ 

    public function __construct ($source) 
    { 
     parent::__construct(); 
     $this->loadHTML($source); 
    } 

    public function getIterator() 
    { 
     static $array; 
     if (NULL === $array) { 
      $xp = new DOMXPath($this); 
      $expression = '//head/link[@rel="stylesheet"]/@href'; 
      $array = array(); 
      foreach ($xp->query($expression) as $node) 
       $array[] = $node->nodeValue; 
     } 
     return new ArrayIterator($array); 
    } 
} 

foreach (new StyleSheets($page) as $index => $file) { 
    $css = file_get_contents($file); 
    echo $css; 
} 
+1

Sự cố này đã được báo cáo cho PHP tại https://bugs.php.net/bug.php?id=60021 do đó sinh ra yêu cầu tính năng trong libxml2 cơ bản: https://bugzilla.gnome.org/ show_bug.cgi? id = 761534 – cweiske

Trả lời

109

Header, Nav và Mục là những yếu tố từ HTML5. Bởi vì các nhà phát triển HTML5 cảm thấy nó quá khó nhớ công cộng và hệ thống định danh, khai báo DOCTYPE chỉ là:

<!DOCTYPE html> 

Nói cách khác, không có DTD để kiểm tra, mà sẽ làm cho DOM sử dụng DTD chuyển tiếp HTML4 và rằng không chứa các yếu tố đó, do đó có các Cảnh báo.

Để surpress các cảnh báo, đưa

libxml_use_internal_errors(true); 

trước khi cuộc gọi đến loadHTML

libxml_use_internal_errors(false); 

sau nó.

Cách khác là sử dụng https://github.com/html5lib/html5lib-php.

+2

đã làm điều đó, bây giờ tôi nhận được một trang trống – user1079160

+2

@ user1079160 đó là một vấn đề khác! Gordon có câu trả lời tốt, cảm ơn! –

+1

@Gordan bạn sửa lỗi trang trắng như thế nào? – CodeGuru

Các vấn đề liên quan