나는 코드 내에서 속성 / 값을 설정할 수 있도록 내가 구문 분석 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 () : 엔티티에서 잘못된 태그 탐색, 줄 : 17 줄의 /home/wbkrnl/public_html/new-mvc/1.php의 4
경고 : DOMDocument :: loadHTML () : 엔티티에서 잘못된 태그 섹션, 줄 : 17 줄의 /home/wbkrnl/public_html/new-mvc/1.php의 10
답변
아니요, 사용할 특정 doctype을 지정하거나 기존 문서 유형의 요구 사항을 수정할 방법이 없습니다.
가장 효과적인 해결책은 다음을 사용하여 오류보고를 비활성화하는 것입니다 libxml_use_internal_errors
.
$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 */
}
다음은 print_r()
단일 오류입니다.
LibXMLError Object
(
[level] => 2
[code] => 801
[column] => 17
[message] => Tag section invalid
[file] =>
[line] => 39
)
message
및 / 또는 을 일치 시키면 code
이러한 항목을 매우 쉽게 필터링 할 수 있습니다.
답변
경고를 죽이는 방법은 없지만 오류는없는 것 같습니다. PHP에는이를 수행해야하는 상수가 있지만 작동하지 않는 것 같습니다. 다음은 SHOULD가 작동하지만 (버그?) …
$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);
답변
