样式</ 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>
大多数解析器会过早结束解析,因为当HTML 4.01在<script>
标记内找到ETAGO( </
)时,它将结束脚本标记解析。 但是,HTML5允许</
之前</script>
。 到目前为止我所尝试过的所有解析器都没有成功,或者它们的记录太差,以至于我没有弄清楚它们是否工作。
我的要求:
输入:
<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正常工作,标记必须没有错误。
Re:html5lib
您点击下载选项卡并下载解析器的PHP版本。
您解压本地文件夹中的存档
tar -zxvf html5lib-php-0.1.tar.gz
x html5lib-php-0.1/
x html5lib-php-0.1/VERSION
x html5lib-php-0.1/docs/
... etc
您更改目录并创建一个名为hello.php的文件
cd html5lib-php-0.1
touch hello.php
您将以下PHP代码放在hello.php
$html = '<html><head></head><body>
<script type="text/x-jquery-tmpl" id="foo">
<table><tr><td>${name}</td></tr></table>
</script>
</body></html>';
$dom = HTML5_Parser::parse($html);
var_dump($dom->saveXml());
echo "nDonen";
你从命令行运行hello.php
php hello.php
解析器将解析文档树,并返回一个DOMDocument对象,该对象可以像任何其他DOMDocument对象一样进行操作。
FluentDOM使用DOMDocument但阻止加载通知和警告。 它没有自己的解析器。 你可以添加自己的加载器(例如使用html5lib的加载器)。
链接地址: http://www.djcxy.com/p/5073.html下一篇: A simple program to CRUD node and node values of xml file