Kla*_*ers 100 php html5 domdocument
我一直在尝试解析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>");
Run Code Online (Sandbox Code Playgroud)
错误
警告:DOMDocument :: loadHTML():实体中的标签导航无效,第17行/home/wbkrnl/public_html/new-mvc/1.php中的第4行:
警告:DOMDocument :: loadHTML():实体中的标记部分无效,第17行/home/wbkrnl/public_html/new-mvc/1.php中的第10行:
lon*_*day 174
不,无法指定要使用的特定文档类型,也无法修改现有文档类型的要求.
您最好的解决方案是使用以下方法禁用错误报告libxml_use_internal_errors:
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML('...');
libxml_clear_errors();
Run Code Online (Sandbox Code Playgroud)
你也可以这样做
@$dom->loadHTML($htmlString);
Run Code Online (Sandbox Code Playgroud)
您可以过滤从解析器获得的错误.根据此处的其他答案,关闭错误报告到屏幕,然后遍历错误并仅显示您想要的错误:
libxml_use_internal_errors(TRUE);
// Do your load here
$errors = libxml_get_errors();
foreach ($errors as $error)
{
/* @var $error LibXMLError */
}
Run Code Online (Sandbox Code Playgroud)
这是一个print_r()错误:
LibXMLError Object
(
[level] => 2
[code] => 801
[column] => 17
[message] => Tag section invalid
[file] =>
[line] => 39
)
Run Code Online (Sandbox Code Playgroud)
通过匹配message和/或code,这些可以很容易地过滤掉.
似乎没有办法消除警告,但不能消除错误。PHP 有一些常量应该可以做到这一点,但它们似乎不起作用。这是应该起作用的,但不起作用是因为(错误?)....
$doc=new DOMDocument();
$doc->loadHTML("<tagthatdoesnotexist><h1>Hi</h1></tagthatdoesnotexist>", LIBXML_NOWARNING );
echo $doc->saveHTML();
Run Code Online (Sandbox Code Playgroud)
http://php.net/manual/en/libxml.constants.php