Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正确使用JTidy净化HTML_Java_Tidy_Htmltidy_Jtidy - Fatal编程技术网

Java 正确使用JTidy净化HTML

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

我试图使用JTidy(JTidy-r938.jar)来清理输入HTML字符串,但在正确设置默认设置时似乎遇到了问题。通常像“helloworld”这样的字符串在整理后会变成“helloworld”。我想展示一下我在这里所做的事情,任何指点都非常感谢:

假设
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会将
转换为byte
a0
,以空格形式打印(
Node.getNodeValue()
),但当您尝试转换为UTF8字符串时,它会打印出来
,因为它不是有效的UTF字符!是的,但不是HTML,显示为