【问题标题】:Proper usage of JTidy to purify HTML正确使用 JTidy 来净化 HTML
【发布时间】:2010-03-30 16:49:07
【问题描述】:

我正在尝试使用 JTidy (jtidy-r938.jar) 来清理输入的 HTML 字符串,但我似乎无法正确设置默认设置。通常,诸如“hello world”之类的字符串在整理后会变成“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");   

首先,上面的代码看起来有什么根本错误吗?我似乎得到了奇怪的结果。

例如,考虑以下输入:

<p class="MsoNormal" style="text-autospace:none;"><font color="black"><span style="color:black;">???</span></font><b><font color="#7f0055"><span style="color:#7f0055;font-weight:bold;">private</span></font></b><font color="black"><span style="color:black;"> String parseDescription</span></font><font>

输出是:

<p class="MsoNormal" style="text-autospace:none;"><font color= "black"><span style="color:black;">&nbsp;&nbsp;&nbsp;</span></font> <b><font color="#7F0055"><span style= "color:#7f0055;font-weight:bold;">private</span></font></b><font color="black"><span style="color:black;">String parseDescription</span></font></p>

所以,

“public String parseDescription”变成“publicString parseDescription”

提前致谢!

【问题讨论】:

  • 我还注意到 jTidy 会将&amp;nbsp; 转换为字节a0,打印为空格(Node.getNodeValue()),但是当您尝试转换为UTF8 字符串时,它会打印出@987654329 @ 因为它不是有效的 UTF 字符!嗯,它是unicode,但不是 HTML,并显示为 ?

标签: java tidy htmltidy jtidy


【解决方案1】:

看看 JTidy 是如何配置的:

StringWriter writer = new StringWriter();
tidy.getConfiguration().printConfigOptions(writer, true);
System.out.println(writer.toString());

也许它会弄清导致问题的原因。

有什么奇怪的?实际输出和预期输出的小例子……也许吧?

【讨论】:

    【解决方案2】:

    嗯,这似乎是 Jtidy 中的一个错误。有关导致问题的确切文件,请参阅此处:

    http://sourceforge.net/tracker/?func=detail&aid=2985849&group_id=13153&atid=113153

    感谢所有帮助的人!

    【讨论】:

      【解决方案3】:

      这是我们如何从 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>
      

      【讨论】:

        猜你喜欢
        • 2012-05-10
        • 2012-03-17
        • 2015-06-02
        • 2019-09-06
        • 1970-01-01
        • 1970-01-01
        • 2014-04-29
        • 2010-11-15
        • 1970-01-01
        相关资源
        最近更新 更多