DOM 문서::로드HTML 오류
저는 한 페이지에 있는 모든 CSS를 하나로 묶어서 제 cms에 사용하는 스크립트를 만듭니다.오랫동안 잘 작동했는데 이제 다음 오류가 발생합니다.
경고: DOMDocument:: loadHTML() [domdocument.loadhtml]:엔티티, 행: 10(css)에서 태그 헤더가 잘못되었습니다.26줄에 있는 php
경고: DOMDocument:: loadHTML() [domdocument.loadhtml]:엔티티, 행: 10(css)에서 태그 탐색이 잘못되었습니다.26줄에 있는 php
경고: DOMDocument:: loadHTML() [domdocument.loadhtml]:엔티티, 행: 22(css)에서 태그 섹션이 잘못되었습니다.26줄에 있는 php
스크립트 php php입니다.
내 코드는 다음과 같습니다.
<?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;
}
머리글, Nav 및 Section은 HTML5의 요소입니다. HTML5 개발자들이 공용 및 시스템 식별자를 기억하는 것이 너무 어렵다고 생각했기 때문에 DocType 선언은 다음과 같습니다.
<!DOCTYPE html>
즉, 확인할 DTD가 없으므로 DOM에서 HTML4 Transitional DTD를 사용하도록 하고 이러한 요소를 포함하지 않으므로 Warnings가 표시됩니다.
경고를 누르려면 다음과 같이 입력합니다.
libxml_use_internal_errors(true);
전화하기 loadHTML
그리고.
libxml_use_internal_errors(false);
그 후에
대안으로 https://github.com/html5lib/html5lib-php 을 사용할 수 있습니다.
DOMDocument 객체의 경우 모든 경고를 억제하기 위해 로드 방법 앞에 @를 배치할 수 있어야 합니다.
$dom = new DOMDocument;
@$dom->loadHTML($source);
그리고 계속하세요.
지원되지 HTML5 "libxml"로 수 있습니다.$options
명령어
설정하기
$doc = new DOMDocument();
$doc->loadHTMLFile("html5.html", LIBXML_NOERROR);
은 이옵은다선다니호됩다보보다 선호됩니다.@
PHP 오류를 잠재웁니다.
그러나 libxml은 매우 관대하며 깨진 HTML 문서를 구문 분석할 수 있습니다.libxml 오류를 침묵시키면 HTML이 잘못된 형식이라는 사실조차 모를 수 있습니다.
대부분의 사람들은 언어로서의 HTML과 XML 그리고 파서와 관련된 HTML과 XML의 차이를 깨닫지 못합니다.파서는 코드를 사용하고 HTML과 XML 파서는 완전히 다릅니다.XML 파서가 브라우저에서 허용하는 몇 가지 사소한 사항(예: 중복)id
값) 코드처럼 보이는 정크를 가지고 장난치지 않습니다.
PHP의하며 PHP의 XML 중복을.id
될 수 에 (를 들어, 로어것예요될소때수있다니문입기가든이떤가치으추가적예▁((▁anything다니:▁element:footer
,header
,section
) PHP의 XML 파서는 알려지지 않은 HTML5+ 요소에 대해 불평하지 않습니다.
$dom->loadXML($xml);
클라이언트 쪽에서 개발 중인 사람이라면 XML 파서를 사용하여 HTML5 코드를 처리하는 것을 강력히 권장합니다. 그리고 2000년대부터 2020년까지 Gecko 브라우저(예: Waterfox, Firefox)를 개발하기 시작한 이래로 전체 페이지가 깨지고 명시적인 오류 메시지가 표시되므로 최고의 XML 파서를 사용할 수 있습니다.더 엄격한 코드는 품질을 이해할 수 있으면 더 나은 결과를 산출하지만 그 반대는 사실이 아닙니다.
DOMDocument를 사용하는 대신 Symfony의 다음 편리한 DomCollower 구성 요소를 사용할 수 있습니다.
https://symfony.com/doc/current/components/dom_crawler.html
composer require symfony/dom-crawler
그러면 멋진 일을 할 수 있습니다.
$crawler = new Crawler($html);
$crawler->filter(".whatever .wild > .query ~.you[name=it]")->each(function($node, $i){
print_r($node->text());
//or something like this
$node->children()->each(function($node_inner, $j){
...
});
...
});
언급URL : https://stackoverflow.com/questions/9149180/domdocumentloadhtml-error
'sourcetip' 카테고리의 다른 글
작곡가 레이블에 종속성(docrine/dbal) 설치 (0) | 2023.08.26 |
---|---|
Springdoc-openapi-ui의 Bearer Token Authentication(JWT)용 인증 사용 단추 (0) | 2023.08.26 |
Xcode 버전 4.6.2(4H1003) 컴파일러 오류 (0) | 2023.08.26 |
PHP에서 MySQL 데이터베이스를 백업하는 방법은 무엇입니까? (0) | 2023.08.26 |
테스트 파일에서 테스트 하나 건너뛰기 Jest (0) | 2023.08.26 |