相关疑难解决方法(0)

html5标签上的PHP 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行:

php html5 domdocument

100
推荐指数
4
解决办法
5万
查看次数

DOM解析器,允许HTML5样式的</ in <script>标记

更新 :( html5lib问题的底部)似乎接近,我只需要提高我对它如何使用的理解.

我正在尝试为PHP 5.3找到兼容HTML5的DOM解析器.特别是,我需要在脚本标记中访问以下类似HTML的CDATA:

<script type="text/x-jquery-tmpl" id="foo">
    <table><tr><td>${name}</td></tr></table>
</script>
Run Code Online (Sandbox Code Playgroud)

大多数解析器都会过早地解析,因为HTML 4.01 在标记</内部找到ETAGO()时会结束脚本标记解析<script>.但是,HTML5 允许</之前</script>.到目前为止,我尝试过的所有解析器都失败了,或者它们的文档记录很差,以至于我还没弄清楚它们是否有效.

我的要求:

  1. 真正的解析器,而不是正则表达式.
  2. 能够加载整页或HTML片段.
  3. 能够将脚本内容拉回,通过标签的id属性进行选择.

输入:

<script id="foo"><td>bar</td></script>
Run Code Online (Sandbox Code Playgroud)

输出失败的示例(无关闭</td>):

<script id="foo"><td>bar</script>
Run Code Online (Sandbox Code Playgroud)

一些解析器及其结果:


DOMDocument(失败)

资源:

<?php

header('Content-type: text/plain');
$d = new DOMDocument;
$d->loadHTML('<script id="foo"><td>bar</td></script>');
echo $d->saveHTML();
Run Code Online (Sandbox Code Playgroud)

输出:

Warning: DOMDocument::loadHTML(): Unexpected end tag : td in Entity, line: 1 in /home/adam/public_html/2010/10/26/dom.php on line 5
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><script id="foo"><td>bar</script></head></html> …
Run Code Online (Sandbox Code Playgroud)

php html5 dom

48
推荐指数
4
解决办法
1万
查看次数

标签 统计

html5 ×2

php ×2

dom ×1

domdocument ×1