gpt4 book ai didi

php - 允许 HTML5 风格的 DOM 解析器
转载 作者:IT王子 更新时间:2023-10-28 23:57:28 27 4
gpt4 key购买 nike

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

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

<script type="text/x-jquery-tmpl" id="foo">
<table><tr><td>${name}</td></tr></table>
</script>

大多数解析器会提前结束解析,因为 HTML 4.01 ends script tag parsing当它在 </ 中找到 ETAGO ( <script> ) 时标签。但是,HTML5 allows for </ 之前 </script> .到目前为止,我尝试过的所有解析器都失败了,或者它们的文档太少,以至于我不知道它们是否有效。

我的要求:

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

输入:

<script id="foo"><td>bar</td></script>

失败输出示例(没有关闭 </td> ):

<script id="foo"><td>bar</script>

一些解析器及其结果:


DOMDocument (失败)

来源:

<?php

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

输出:

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>


FluentDOM (失败)

来源:

<?php

header('Content-type: text/plain');
require_once 'FluentDOM/src/FluentDOM.php';
$html = "<html><head></head><body><script id='foo'><td></td></script></body></html>";
echo FluentDOM($html, 'text/html');

输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head></head><body><script id="foo"><td></script></body></html>


phpQuery (失败)

来源:

<?php

header('Content-type: text/plain');

require_once 'phpQuery.php';

phpQuery::newDocumentHTML(<<<EOF
<script type="text/x-jquery-tmpl" id="foo">
<td>test</td>
</script>
EOF
);

echo (string)pq('#foo');

输出:

<script type="text/x-jquery-tmpl" id="foo">
<td>test
</script>


html5lib (通过)

可能很有前途。我可以获取 script#foo 的内容吗?标签?

来源:

<?php

header('Content-type: text/plain');

include 'HTML5/Parser.php';

$html = "<!DOCTYPE html><html><head></head><body><script id='foo'><td></td></script></body></html>";
$d = HTML5_Parser::parse($html);

echo $d->saveHTML();

输出:

<html><head></head><body><script id="foo"><td></td></script></body></html>

最佳答案

我遇到了同样的问题,显然你可以通过将文档加载为 XML 并将其保存为 HTML 来解决这个问题 :)

$d = new DOMDocument;
$d->loadXML('<script id="foo"><td>bar</td></script>');
echo $d->saveHTML();

当然,要使 loadXML 工作,标记必须没有错误。

关于php - 允许 HTML5 风格的 DOM 解析器 </in &lt;script&gt; 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029341/

27 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com