Java 正确使用JTidy净化HTML
我试图使用JTidy(JTidy-r938.jar)来清理输入HTML字符串,但在正确设置默认设置时似乎遇到了问题。通常像“helloworld”这样的字符串在整理后会变成“helloworld”。我想展示一下我在这里所做的事情,任何指点都非常感谢: 假设Java 正确使用JTidy净化HTML,java,tidy,htmltidy,jtidy,Java,Tidy,Htmltidy,Jtidy,我试图使用JTidy(JTidy-r938.jar)来清理输入HTML字符串,但在正确设置默认设置时似乎遇到了问题。通常像“helloworld”这样的字符串在整理后会变成“helloworld”。我想展示一下我在这里所做的事情,任何指点都非常感谢: 假设rawHtml是包含输入(真实世界)HTML的字符串。这就是我正在做的: Tidy tidy = new Tidy(); tidy.setPrintBodyOnly(true); ByteArr
rawHtml
是包含输入(真实世界)HTML的字符串。这就是我正在做的:
Tidy tidy = new Tidy();
tidy.setPrintBodyOnly(true);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
tidy.parse(new StringReader(rawHtml), ps);
return baos.toString("UTF8");
首先,上面的代码有什么根本性的错误吗?我似乎得到了奇怪的结果
例如,考虑以下输入:
??私有字符串解析说明
输出为:
私弦
语法描述
所以
“public String parseDescription”变为“publicString parseDescription”
提前谢谢 下面是我们如何从Ant中调用JTidy。您可以从中推断API调用:
<tidy destdir="${build.dir.result}">
<fileset dir="${src}" includes="**/*.htm"/>
<parameter name="tidy-mark" value="false"/>
<parameter name="output-xml" value="no"/>
<parameter name="numeric-entities" value="yes"/>
<parameter name="indent-spaces" value="2"/>
<parameter name="indent-attributes" value="no"/>
<parameter name="markup" value="yes"/>
<parameter name="wrap" value="2000"/>
<parameter name="uppercase-tags" value="no"/>
<parameter name="uppercase-attributes" value="no"/>
<parameter name="quiet" value="no"/>
<parameter name="clean" value="yes"/>
<parameter name="show-warnings" value="yes"/>
<parameter name="break-before-br" value="yes"/>
<parameter name="hide-comments" value="yes"/>
<parameter name="char-encoding" value="latin1"/>
<parameter name="output-html" value="yes"/>
</tidy>
看看JTidy是如何配置的:
StringWriter writer = new StringWriter();
tidy.getConfiguration().printConfigOptions(writer, true);
System.out.println(writer.toString());
也许这样就能弄清楚问题的原因了
什么奇怪?实际输出和预期输出的小示例。。。也许吧?好吧,这似乎是jtiy中的一个bug。有关导致问题的确切文件,请参阅此处:
谢谢大家的帮助 我还注意到jTidy会将
转换为bytea0
,以空格形式打印(Node.getNodeValue()
),但当您尝试转换为UTF8字符串时,它会打印出来?
,因为它不是有效的UTF字符!是的,但不是HTML,显示为?
。