我一直在尝试解析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():标记导航在实体中无效,第4行位于/home/wbkrnl/public_html/new-mvc/1.php的第17行
警告: DOMDocument::loadHTML():实体中的标记部分无效,第10行/home/wbkrnl/public_html/new-mvc/1.php第17行
发布于 2011-05-23 04:56:30
不,无法指定要使用的特定文档类型,也无法修改现有文档类型的要求。
您最好的可行解决方案是禁用libxml_use_internal_errors
的错误报告
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML('...');
libxml_clear_errors();
发布于 2014-09-04 16:56:48
你也可以这样做
@$dom->loadHTML($htmlString);
发布于 2015-12-02 18:47:12
您可以过滤从解析器获得的错误。根据这里的其他答案,关闭对屏幕的错误报告,然后迭代错误并只显示您想要的错误:
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
上进行匹配,可以很容易地过滤掉这些。
https://stackoverflow.com/questions/6090667
复制相似问题