programing

PHP DOMhtml5 태그 오류/경고

goodcopy 2022. 11. 7. 23:23
반응형

PHP DOMhtml5 태그 오류/경고

HTML5 코드를 해석하여 코드 내에서 속성/값을 설정하려고 했는데 DOMDocument(PHP5.3)는 다음과 같은 태그를 지원하지 않는 것 같습니다.<nav>그리고.<section>.

이것을 PHP에서 HTML로 해석하여 코드를 조작할 수 있는 방법이 있습니까?


복제할 코드:

<?php
$dom = new DOMDocument();
$dom->loadHTML("<!DOCTYPE HTML>
<html><head><title>test</title></head>
<body>
<nav>
  <ul>
    <li>first
    <li>second
  </ul>
</nav>
<section>
  ...
</section>
</body>
</html>");

에러

경고: DOMDocument::loadHTML(): 엔티티, 줄: /home/wbkrnl/public_html/new-mvc/1.php에서 태그 탐색이 비활성화됩니다.

경고: DOMDocument::loadHTML(): 엔티티의 태그 섹션이 유효하지 않습니다.행: 17행의 /home/wbkrnl/public_html/new-mvc/1.php 10

아니요, 사용할 특정 문서를 지정하거나 기존 문서의 요구 사항을 수정할 수 없습니다.

가장 효과적인 솔루션은 에러 리포트를 무효로 하는 것입니다.

$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML('...');
libxml_clear_errors();

할 수도 있고

@$dom->loadHTML($htmlString);

파서에서 발생하는 오류를 필터링할 수 있습니다.다른 답변과 마찬가지로 화면에 대한 오류 보고를 해제한 다음 오류를 반복하고 원하는 항목만 표시합니다.

libxml_use_internal_errors(TRUE);
// Do your load here
$errors = libxml_get_errors();

foreach ($errors as $error)
{
    /* @var $error LibXMLError */
}

여기 a가 있습니다.print_r()단일 오류의 경우:

LibXMLError Object
(
    [level] => 2
    [code] => 801
    [column] => 17
    [message] => Tag section invalid

    [file] => 
    [line] => 39
)

매칭에 의해message및/또는code, 이것들은 꽤 쉽게 걸러질 수 있습니다.

경고는 없애지만 오류는 없앨 수 있는 방법은 없는 것 같습니다.PHP에는 이 작업을 수행해야 하는 상수가 있지만 작동하지 않는 것 같습니다.동작해야 하지만 (버그?) 때문에 동작하지 않는 것은 다음과 같습니다.

 $doc=new DOMDocument();
 $doc->loadHTML("<tagthatdoesnotexist><h1>Hi</h1></tagthatdoesnotexist>", LIBXML_NOWARNING );
 echo $doc->saveHTML();

http://php.net/manual/en/libxml.constants.php

이 방법은 효과가 있었습니다.

$html = file_get_contents($url);

$search = array("<header>", "</header>", "<nav>", "</nav>", "<section>", "</section>");
$replace = array("<div>", "</div>","<div>", "</div>", "<div>", "</div>");
$html = str_replace($search, $replace, $html);

$dom = new DOMDocument();
$dom->loadHTML($html);

헤더 태그가 필요한 경우 div 태그로 헤더를 변경하고 ID를 사용합니다.예:

$search = array("<header>", "</header>");
$replace = array("<div id='header1'>", "</div>");

최선의 해결책은 아니지만 상황에 따라서는 유용할 수 있습니다.

행운을 빌어요.

HTML5 태그는 거의 항상 id, class 등의 속성을 사용합니다.교환 코드는 다음과 같습니다.

$html = file_get_contents($url);
$search = array(
    "<header", "</header>", 
    "<nav", "</nav>", 
    "<section", "</section>",
    "<article", "</article>",
    "<footer", "</footer>",
    "<aside", "</aside>",
    "<noindex", "</noindex>",
);
$replace = array(
    "<div", "</div>",
    "<div", "</div>", 
    "<div", "</div>",
    "<div", "</div>",
    "<div", "</div>",
    "<div", "</div>",
    "<div", "</div>",
);
$html = str_replace($search, $replace, $html);
$dom = new DOMDocument();
$dom->loadHTML($html);

언급URL : https://stackoverflow.com/questions/6090667/php-domdocument-errors-warnings-on-html5-tags

반응형