JTidy无法处理脚本元素中的HTML标记

时间:2016-11-28 17:12:58

标签: java html jtidy

(这是我几天前的a problem的后续内容,其中JTidy在300k HTML文档中报告了3个错误,但没有报告在哪里。经过一些研究,我发现了什么似乎导致错误,我对此有强烈的怀疑,但我还没决定该怎么做。)

这是一个小的独立HTML表达式,导致JTidy报告错误:

<html>
<body>
Some text.
<script type="text/javascript">
var foo = "Press <u>ESC</u> to continue";
</script>
</body>
</html>

Javascript字符串常量包含HTML标记,这些一致地抛出JTidy - 删除下划线元素,JTidy完美解析。更准确地说,JTidy的解析器在结束标记上报告错误;开始标记很好(输出可能有些错误,但对我以后的目的来说已经足够了)。即使您注释掉字符串,错误也会报告:

// Any closing tags here at all will <b>throw JTidy off</b>.

我认为上述内容是有效的HTML是安全的。但我找不到任何关于如何处理它的文件。搜索周围,我发现this has been fixed in tidy-html5;它似乎只在Java端口JTidy中被破坏了。

根据其SourceForge page,我发现我正在使用最新的JTidy;版本r938是我的Maven回购中的一个。 (实际上,源是在沙盒中解压缩的,所以我可以调试这个问题。)我上面链接的错误报告是2015年的日期; JTidy r938于2009年问世。

我是否相信JTidy处理错误?如果是这样,我应该尝试解决它,还是已经在某个私人分支中解决了?我不会称自己为解析器/词法分析专家,但如果必须的话,我可能会糊里糊涂。

1 个答案:

答案 0 :(得分:1)

这确实是JTidy中的一个错误。可悲的是,我已经解决了(以及其他问题),但最终没有发布新版本,因为我没有时间再研究JTidy了。

代码在subversion中可用,如果你从trunk查看最新版本并构建它,你的程序应该可以工作。

我还创建了一个名为CodeUpdateAndJava5的分支,在其中我将代码更接近整洁工具的行为(在他们开始处理html5版本之前)并开始添加更多现代java功能。该代码也可以工作;虽然我没有基于它发布任何版本。

根据您的需要,jsoup library可能会更适合您,并且可以维护和更新。